2016-04-26 11 views
0

私はメッセージを送信しても4回アラートが発生しています! 何が間違っているかわからない! マニフェストも追加しています。複数のメッセージが1つだけ送信されたときにコンテンツページに受信されますか?

background.js:

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) { 
    if(request.method == "123") 
    { 
     chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
     chrome.tabs.sendMessage(tabs[0].id, {method: "xyz"}); 
      }) 
    } 
}); 

content.js:

chrome.runtime.onMessage.addListener(
    function(request) { 
     alert(request.method); 
     if (request.method == "xyz"){ 
      alert("hello); 
     } 
}); 

これはマニフェストファイル マニフェストです:あなたはあなたのmanifest.json"all_frames": trueを宣言している

{ 
"manifest_version" : 2, 
"version" : "0.1.0.0", 
"name" : "xyz", 
    "short_name": "xyz", 
    "permissions" : [" <all_urls>","tabs","storage","notifications","unlimitedStorage","downloads"], 

"background": { 
"scripts": ["background.js"] 

    }, 

"content_scripts": [{ 

"matches": ["<all_urls>","http://*/*","https://*/*"], 
"js": [ 
    "content.js", 
     ], 
    "all_frames" : true 
}], 
"browser_action" : { 
    "default_title" : "test", 
    "default_popup" : "popup.html" 
}, 
"devtools_page" : "xyz.html" 

} 
+0

をチェックしてコンテンツスクリプトirst? –

+0

私はdevtoolパネルからバックグラウンドに、そしてバックグラウンドからメッセージにメッセージを送ります! –

+0

あなたの 'manifest.json'のようなコードを提供してください。私はiframe用のスクリプトも挿入すると思います。 –

答えて

3

、これはあなたのコンテンツスクリプトがあなたのウェブページのすべてのiframeに、メッセージがバックグラウンドページから送信されると、コンテンツスクリプト内のすべてのリスナーがそれに応答します。この問題を解決するには

  1. "all_frames"一部を削除するか、あなたは、あなたのスクリプトがフレームの中に注入されるようにしたいですし、唯一のトップウィンドウ内のメッセージに応答したい場合は、それをfalse
  2. を設定し、あなたは検出することができましたあなたがfであなたのメッセージを送ったwindow !== window.top

    if (window !== window.top) { 
        chrome.runtime.onMessage.addListener(callback); 
    } 
    
+0

こんにちは、申し訳ありませんが、すべてのフレームで何を意味するのですか?私はそれを削除すると、コンテンツのスクリプトはまだ現在のWebページ上で動作しますか? –

+0

@Ramもちろん、all_framesは、コンテンツスクリプトが一致するページのすべてのフレームで実行されるのか、トップフレームだけで実行されるのかを制御します。 –

+0

ok!その場合でもコンテンツスクリプトはウェブページ全体にアクセスできますか? –

関連する問題