3

這裏是在擴展中運行的代碼,位於background.html中。使用Chrome擴展中的通道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 * ERR無效+令牌401 *接近

當我做到這一點的延伸範圍之外(不使用AJAX建立連接)它像一個魅力。

我在哪裏誤入歧途?

+0

你確定localhost正在返回一個有效的令牌嗎? – abraham

+0

我很確定這個令牌是有效的。正如我寫的,當我創建不在鉻擴展上下文中的令牌並且不使用ajax(像通道API正式文檔建議的那樣)時,它工作得很好。 – shayuna

+0

嘗試獲取通過擴展生成的令牌,並確保它在擴展上下文之外工作。 – abraham

回答

2

正如我從您的評論中看到的,您在本地開發系統上測試通道API時遇到問題。

它的工作對我來說,當我下載了channel.js(而不是使用http://*.appspot.com/_ah/channel/jsapi),並在後臺腳本中使用本地副本

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

在channel.js,改線definining

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

代表本地環境(端口的AppEngine TESTSERVER)

而且,網址你把你的xhr.open到必須在喲烏爾體現「權限」部分,在我的情況

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

由當地的AppEngine上產生TESTSERVER從livesystem情況有所不同的記號,所以它不可能將兩者攪和。