0

Google App Engine(Python)サーバーのチャンネルを作成しようとしていますが、問題があるようですが、その理由はわかりません。ユーザーが内線番号を切り替えると、ユーザーが認証されます。成功すると、サーバーはチャネルの作成に使用するチャネルトークンで応答します。ユーザーを認証すると、alert("a")が表示されますが、alert("b")という行に問題があるとは思われませんが、コンソールにはエラーが報告されません。Chrome拡張機能 - チャンネルが機能しない

また、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" 
    } 
} 

EDIT - console.log(channel)を行った後、私は未定義 'のイベントハンドラでエラー 'エラーを発見しました':にReferenceError:GOOGが定義されていません'。なぜこのエラーが表示されるのかわからないのですが、これは私がこのpostに従って必要なjavascriptファイルを含めたものです。

+1

マニフェストファイルを表示できますか?適切な権限を要求しましたか? 'chrome:// extensions /'>開発者モードでバックグラウンドページ(Devツールのインスタンス)を開き、エラーがないかチェックします(また、バックグラウンドページ内の 'console.log'呼び出しはこのDevツールページ)。 –

+1

スウィートトリック!私はあなたがconsole.logの背景ページをチェックできるかどうか分からなかった。 – Jon

答えて

1

解決策は、ファイル<script type="text/javascript" src="https://talkgadget.google.com/talkgadget/channel.js"></script>をHTMLページに含めることです。私はこれをbackground.htmlの最初の行に置きました。

私の間違いは、channel.jsのローカルコピーを保存していて、それをmanifest.jsonで参照していました。

私は今、私のサーバにchannel.jsのコピーを置き、私のサーバのコピーを参照します。私はそれに何か問題があるとは思わない。

0

alert( "a")とvar channel = ... の間のmsg値のコンソールログを作成し、値を調べます。

+0

'alert(" a ")'の直後に 'console.log(msg)'を追加しましたが、コンソールは何も報告しませんでした。私はauthenticate.jsに戻り、 'console.log(channelToken)'が存在したことを二重にチェックしました。 GoogleのAPIからコードを渡すコードをコピーしました。 – Jon

+0

待ちます。私はちょうど実現しました...もしあなたが 'console.log()'をbackground.htmlの中に入れたら、返信は実際にコンソールに表示されますか?私が理解しているところから、なぜそれが私が無意識に '警告()'を使用したのではないのでしょうか。 – Jon

+0

代わりに 'alert(msg.token)'を実行しましたが、私はトークンでプロンプトを出しました。 – Jon

関連する問題