在 chrome 扩展中使用频道 google 应用引擎

Posted

技术标签:

【中文标题】在 chrome 扩展中使用频道 google 应用引擎【英文标题】:using the channel google app engine from within a chrome extension 【发布时间】:2012-01-06 20:09:41 【问题描述】:

这是在扩展程序中运行的代码,在 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 * err invalid+token 401 * 关闭

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

我会误入歧途吗?

【问题讨论】:

你确定 localhost 返回一个有效的令牌吗? 我很确定令牌是有效的。正如我所写,当我不在 chrome 扩展上下文中创建令牌并且不使用 ajax(按照频道 api 正式文档建议的那样做)时,它工作得很好。 尝试获取通过扩展生成的令牌并确保它在扩展上下文之外工作。 无法完成。每次请求打开频道时,都会在服务器端动态生成令牌 只需在您的代码中添加console.log(token);,您就可以使用它在扩展上下文之外打开一个通道。 【参考方案1】:

我从您的评论中看到,您在本地开发系统上测试频道 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 中的令牌不同,因此不能将两者混合使用。

【讨论】:

以上是关于在 chrome 扩展中使用频道 google 应用引擎的主要内容,如果未能解决你的问题,请参考以下文章

Chrome扩展程序适用于比应有的更多网址

在 React 中使用 Firebase 进行 Google 登录以进行 chrome 扩展

在 Chrome 扩展程序中使用 Google 帐户进行服务器端身份验证

使用 Chrome 扩展程序在 Google Chrome 浏览器中访问搜索查询文本

Google Cast 频道错误

如何在 Chrome 扩展程序 browser_action 中登录 Google?