点击和页面加载时的Chrome扩展程序

时间:2014-10-06 17:09:04

标签: javascript json google-chrome google-chrome-extension

是否可以在页面加载和点击时运行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);
    }
});

但我想将它们合并在一起,因为在页面上附加脚本似乎并不总是正确加载:/

1 个答案:

答案 0 :(得分: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是一件好事。