2015-05-15 123 views
0

我有我的pop-up script鉻擴展名,用於計算頁面上的文字。所以當我點擊插件工具欄圖標時,它開始加載併發送消息到content-script,作爲回報,content-script在頁面上回復了word-count信息。Chrome擴展中的彈出式腳本多次發送消息

var Popup = (function() { 
    function Popup() { 
     chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { 
      var message = {}; 
      chrome.tabs.sendMessage(tabs[0].id, message, function (response) { 
       alert("!"); // I can see this alert many times (1..4) 
        var count = response.data; 
        if (count != 1) { 
         document.getElementById("word-count").innerText = count; 
        } 
      }); 
     }); 
    } 
    return Popup; 
})(); 
new Popup(); 

的問題是,sendMessage被調用多次(當彈出腳本本身負載本身只有一次)。

有時它會調用sendMessage 1次,有時2,3,4,但對於某些頁面(如堆棧溢出站點)只有一次。

問:我想知道爲什麼我會發生?

UPDATE:

FYI:我有權只爲一個/有源標籤,這裏是東西在我的manifest.json

"permissions": [ 
    "<all_urls>", 
    "activeTab", 
    "storage" 
    ] 

內容腳本部分:

"content_scripts": [ 
    { 
     "matches": ["*://*/*"], 
     "css": ["css/content.css"], 
     "all_frames" : true, 
     "js": [ 

     "lib/jquery/jquery.min.js", 
     "lib/jquery/jquery.min.map", 

     "src/msg/IMessage.js", 
     "src/msg/IMessage.ts", 


     "src/content/IFrame.js", 
     "src/content/IFrame.ts", 
     "src/content/Content.js" 
     ] 
    } 
    ], 
+0

問題的次數是否與您打開的標籤數量相關? –

+0

我認爲這取決於它,但這不是一個規則,即使一個標籤頁打開,我仍然有這個問題 – ses

+0

順便說一句,沒有reaso n在該函數上調用''new''。同樣,你可以擺脫匿名函數包裝,這仍然沒有問題。 –

回答

2

https://developer.chrome.com/extensions/tabs#method-sendMessage

將單條消息發送到指定選項卡中的內容腳本,並在回覆響應時使用可選的回調來運行。 runtime.onMessage事件在當前擴展的指定選項卡中運行的每個內容腳本中觸發。

這意味着,如果在 S中的選項卡上運行的內容腳本,這些也將被執行。

+1

那麼,你有它,帕特里克擊敗了我。您的內容腳本被注入到所有框架中。請注意,您可以指定框架ID。 – Xan

+0

是的,如果在chrome中查看內容腳本調試信息/面板,它會顯示我有4個內容腳本+所有lib文件夾中的內容。看來它似乎是doc的有用位。 – ses

+0

的確,我的內容腳本Content.js創建IFrame並將其附加到用戶html頁面。但是我只在一個地方列出味精,在那個地方我收到了兩次和更多次的信息。我想是因爲那個iFrame ..所以我必須區分如何忽略針對Ifrmae的那一個。 – ses

0

我的問題(也)是明顯的content_scripts「:

"all_frames" : true 

(現在我將它設置爲false

根據它不停地創建內容的腳本實例的頁面幀的數量..

相關問題