这是在扩展程序中运行的代码,在background.html中。
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;
}
它与一个localhost服务器脚本(在python中)交互,该脚本创建一个通道并返回一个令牌。然后令牌用于在客户端创建通道对象。 相反,我从汇总回复得到的是:
channel-354645736-1234 *错误无效+令牌401 * 关闭
当我在扩展范围之外(不使用ajax建立连接)时,它就像一个魅力。
我哪里误入歧途?
答案 0 :(得分:2)
正如我从您的评论中看到的,您在本地开发系统上测试通道API时遇到了问题。
当我下载channel.js(而不是使用http://*.appspot.com/_ah/channel/jsapi)并在后台脚本上使用本地副本时,它对我有用
<script type="text/javascript" src="/lib/channel.js"></script>
在channel.js中,更改行定义
goog.appengine.DevSocket.BASE_URL = "http://localhost:8080/_ah/channel/";
代表您的本地环境(appengine testserver的端口)
此外,您发送xhr.open的网址必须在您的清单“权限”部分中,在我的情况下
"permissions":
[
...,
"http://localhost:8080/"
]
本地appengine testserver生成的令牌与生命系统中的令牌不同,因此无法将两者混合使用。