2014-10-06 57 views
0

有沒有辦法在頁面加載和點擊時運行Chrome擴展?點擊和頁面加載時的Chrome擴展

如果用戶在某個頁面上,我希望擴展程序運行並將腳本追加到已加載頁面的頭部。

然後,我希望用戶有能力點擊擴展,並且擴展運行一個不同的腳本來調用頁面上的腳本。

我已經看到了在頁面加載如下:

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
    if (changeInfo.status == 'complete' && tab.active) { 

    // run script/code here 

    } 
}) 

,我一直在使用上點擊以下:

chrome.browserAction.onClicked.addListener(function (tab) { 
    if (tab.url.indexOf(".mydomain.com/") != -1) { 
     chrome.tabs.executeScript(tab.id, { 
      "file": "contentscript.js" 
     }, function() { 
      console.log("Script Executed..."); 
     }); 
    } else { 
     var wrongTab = chrome.i18n.getMessage("wrongTab"); 
     alert(wrongTab); 
    } 
}); 

但我想它們合併在一起作爲附加腳本到頁面似乎並不總是正確加載:/

回答

0

總是加載在某個頁面上,您應該使用manifest-injected scripts,例如

"content_scripts" : [ 
    { 
     "matches" : ["*://*.mydomain.com/*"], 
     "js" : ["contentscript.js"] 
    } 
    ], 

這將自動應用於(重新)加載時匹配URL上的任何頁面。

當你想在點擊時注入一個腳本(只在與第一個腳本相同的域上的頁面上)時,我沒有完全獲得它。如果您想要信號的現有內容腳本做一些事情,這樣做的最佳方式是與Messaging

// contentscript.js 
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){ 
    if(message.doSomething){ 
    /* do something with message.data */ 
    } 
}); 

// background.js 
chrome.browserAction.onClicked.addListener(function (tab) { 
    chrome.tabs.sendMessage(
    tab.id, 
    {doSomething: true, data: "anything"}, 
    function(response) { 
     if(chrome.runtime.lastError) { 
     // There was no script listening 
     } 
    } 
); 
}); 

如果你想要做的事在任何網頁,而不是唯一的你注入,就按一下按鈕 - 那麼你必須使用chrome.tabs.executeScript。如果您希望該按鈕僅在某些頁面上處於活動狀態,請考慮使用Page Action代替。

另外,請注意所需的權限。如果您想在點擊處理程序的標籤上操作,"activeTab" permission是一件好事。

相關問題