我正在尝试为我的Google App Engine(Python)服务器创建一个频道,似乎存在问题,但我不确定原因。当用户切换扩展名时,它会对用户进行身份验证。如果成功,服务器将回复我用于创建频道的频道令牌。当我对用户进行身份验证时,会显示alert("a")
,但alert("b")
不会让我相信行var channel = new goog.appengine.Channel(msg.token);
出现问题,但控制台不报告错误。
我还复制了here中的javascript代码并将其放在我的清单中,反对将<script type="text/javascript" src="/_ah/channel/jsapi"></script>
放入background.html。
//script.js
function authenticate(callback) {
var url = "https://r-notes.appspot.com/init/api/authenticate.json?username=" + username + "&password=" + password;
$.post(url, function(data) {
if (data.status == "200") {
channelToken = data.channeltoken;
if (callback) {
callback();
}
var port = chrome.extension.connect({name: "myChannel"});
port.postMessage({token: channelToken});
port.onMessage.addListener(function(msg) {
console.log(msg.question);
});
}
});
}
//background.html
chrome.extension.onConnect.addListener(function(port) {
port.onMessage.addListener(function(msg) {
alert("a"); //pops up
var channel = new goog.appengine.Channel(msg.token);
alert("b"); //does not pop up
console.log(channel); //display error ' Error in event handler for 'undefined': ReferenceError: goog is not defined '
var socket = channel.open()
socket.onopen = function() {
// Do stuff right after opening a channel
console.log('socket opened');
}
socket.onmessage = function(evt) {
// Do more cool stuff when a channel message comes in
console.log('message recieved');
console.log(evt);
}
});
});
//manifest.json
{
"name": "moot",
"description": "Clicking on the moot button will display a sidebar!",
"version": "0.2.69",
"background_page": "html/background.html",
"browser_action": {
"default_icon": "img/icon_64.png",
"default_title": "moot"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["js/channelApi.js",
"js/script.js", "js/mootsOnSidebar.js", "js/mootsOnPage.js", "js/authenticate.js", "js/otherFunctions.js",
"js/jquery/jquery-1.7.1.js", "js/jquery/jquery.mCustomScrollbar.js", "js/jquery/jquery-ui.min.js",
"js/jquery/jquery.autosize.js", "js/jquery/jquery.mousewheel.min.js", "js/jquery/jquery.easing.1.3.js",
"js/channel.js"],
"css": ["css/cssReset.css", "css/sidebar.css", "css/onPageCreate.css", "css/onPageExists.css", "css/scrollbar.css", "css/authenticate.css"]
}
],
"permissions": [
"tabs", "contextMenus", "http://*/*", "https://*/"
],
"icons": {
"16": "img/icon_16.png",
"64": "img/icon_64.png"
}
}
编辑 - 执行console.log(channel)
后,我发现错误''undefined'的事件处理程序错误:ReferenceError:goog未定义'。我不确定为什么我收到此错误,因为我按照此post包含了所需的javascript文件。
答案 0 :(得分:1)
因此,解决方案是您需要在HTML页面中包含文件<script type="text/javascript" src="https://talkgadget.google.com/talkgadget/channel.js"></script>
。我把它放在background.html的第一行。
我的错误是保存了channel.js的本地副本,并在manifest.json中引用它。
我现在要在我的服务器上放置一个channel.js副本,并参考我服务器的副本。我不认为会有任何问题。
答案 1 :(得分:0)
在alert(“a”)和var channel = ...之间建立一个控制台日志,指示msg的值。 并检查价值。