Chrome扩展程序 - 渠道无效

时间:2012-04-03 06:28:42

标签: javascript google-app-engine google-chrome-extension channel

我正在尝试为我的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文件。

2 个答案:

答案 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的值。 并检查价值。