3

ここでは、拡張子のbackground.htmlで実行されるコードを示します。クロム拡張子の中からチャンネルgoogleアプリエンジンを使用

function onLoad() 
{ 

    var path="http://localhost:8082/index.htm?key=1234"; 
    xhr.open('get', path, false); 
    xhr.send(); 
    token=xhr.responseText; 
    caughtMsg=token+" *** "; 
    var channel = new goog.appengine.Channel(token); 
    var handler = { 
     'onopen': function(){caughtMsg+=" *** open";}, 
     'onmessage': onMessage, 
     'onerror': function(e){caughtMsg+=" *** err "+e.description+" "+e.code}, 
     'onclose': function(){caughtMsg+=" *** close";} 
    }; 
    var socket = channel.open(handler); 
    socket.onmessage = onMessage; 

} 

チャネルを作成してトークンを返すローカルホストサーバースクリプト(Pythonで)とやりとりします。トークンを使用してクライアント側にチャネルオブジェクトを作成します。 代わりに、私は、集約応答から取得することです:

チャネル-354645736から1234近い401 *トークン+ * errが無効

私が確立するAJAXを使用していない(拡張範囲外でそれを行うとき接続)それは魅力のように動作します。

ここで私は迷っていますか?

+0

localhostが有効なトークンを返していますか? – abraham

+0

私はトークンが有効であると確信しています。私が書いたように、クロム拡張コンテキストにないトークンを作成し、ajaxを使用しないとき(チャンネルapiの正式なドキュメントアドバイスのようにして)、うまくいきます。 – shayuna

+0

拡張機能で生成されたトークンを取り出し、拡張機能コンテキスト外で動作することを確認してください。 – abraham

答えて

2

あなたのコメントからわかるように、ローカル開発システムでチャンネルAPIをテストする際に問題がありました。

私は(httpではなく使用する://*.appspot.com/_ah/channel/jsapi)をchannel.jsをダウンロードしたときには、私のために働いたとバックグラウンドスクリプトのローカルコピーを使用

<script type="text/javascript" src="/lib/channel.js"></script> 
channel.jsで

は、

また、URLあなたはヨーヨーでなければなりませんし、あなたのxhr.openを送るローカル環境(のAppEngine TESTSERVER用ポート)を表現するために

goog.appengine.DevSocket.BASE_URL = "http://localhost:8080/_ah/channel/"; 

をdefinining行を変更しますウルマニフェスト「許可」セクション、2を混合するために、そのことはできませんので、私の場合は、お近くのAppEngineのTESTSERVERによって生成

"permissions": 
    [ 
    ..., 
    "http://localhost:8080/" 
    ] 

トークンは、livesystemでのものとは異なります。

関連する問題