3

这是在扩展程序中运行的代码,位于 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 中)交互。然后令牌用于在客户端创建通道对象。相反,我从汇总响应中得到的是:

通道 354645736-1234 * 错误无效+令牌 401 *关闭

当我在扩展范围之外执行此操作时(不使用 ajax 建立连接),它就像一个魅力。

我会误入歧途吗?

4

1 回答 1

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 测试服务器的端口)

此外,在我的情况下,您发送 xhr.open 的 URL 必须在您的清单“权限”部分中

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

本地 appengine 测试服务器生成的令牌与 livesystem 中的令牌不同,因此不能将两者混合。

于 2012-02-18T08:19:48.687 回答