来自background.js的内容脚本中的Chrome调用功能

Leb*_*156 10 javascript google-chrome-extension

我已经阅读了文档,但我仍然无法使用它.

这是我的清单:

{
    "name":"app",
    "version":"0.1",
    "manifest_version":2,
    "description":"app",
    "background":{
        "scripts":[
            "scripts/modernizr.min.js", 
            "scripts/background.js"
            ],
        "persistent": false
    },
    "content_scripts": [
      {
        "matches": ["https://*/*", "http://*/*"],
        "js": ["scripts/content.js"],
        "run_at": "document_end"
      }
    ],
    "permissions":[
        "contextMenus", 
        "tabs",
        "http://*/*",
        "https://*/*"
        ],
    "icons":{
        "16":"images/icon_16.png",
        "128":"images/icon_128.png"
    }
}
Run Code Online (Sandbox Code Playgroud)

我在content.js中有一个名为"myFunc"的函数.在background.js中,我有一个函数,"myHandler",由contextMenus.onClicked监听器调用.我想从myHandler调用myFunc.我尝试使用tabs.executeScript和tabs.query,但我似乎无法获得要调用的函数.任何人都可以向我解释我应该让background.js调用content.js中的函数吗?

方 觉*_*方 觉 13

要从后台页面调用内容脚本中的函数,首先需要知道选项卡ID.contextMenus.onClickedevent有一个tab包含该id 的参数.然后使用消息传递来执行此操作.

例如,在您的后台页面中:

chrome.contextMenus.onClicked.addListener(function(info, tab) {
  if (tab)
    chrome.tabs.sendMessage(tab.id, {args: ...}, function(response) {
      // ...
    });
});
Run Code Online (Sandbox Code Playgroud)

在您的内容脚本中:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    sendResponse(myFunc(request.args));
});
Run Code Online (Sandbox Code Playgroud)

  • 想要补充一点,这个API在过去两年中发生了变化,现在看起来就是这样. (2认同)