chrome扩展,以便在页面加载时运行脚本

chrome extension to run script on page load

本文关键字:加载 运行 脚本 扩展 chrome      更新时间:2023-09-26

我正在编写一个chrome扩展,它应该能够在加载后立即在该页面上运行脚本。我实现了在点击扩展图标时运行代码的功能,但当我添加代码在页面加载时运行该脚本时,它不起作用

清单文件

 {
  "name": "",
   "description": "",
   "version": "1.0",
   "permissions": [
     "activeTab",
     "tabs"
    ],
   "background": {
    "scripts": ["background.js"],
    "persistent": false
    },
   "browser_action": {
      "default_title": "",
  "default_icon": "6a00e3982283618833019affd3c028970c.png"
   },
  "manifest_version": 2
  }

js文件:

chrome.tabs.onUpdated.addListener(
  function ( tabId, changeInfo, tab )
  { 
    if ( changeInfo.status === "complete" )
    {
      chrome.tabs.executeScript({
      code: "console.log('dsff');"
    });
  }
});

但尽管如此,当任何用户更改选项卡中的页面时,我的js都不会运行

如果您向chrome.tabs.executeScript(...)注册回调以捕获任何错误,例如:

chrome.tabs.executeScript({ code: "console.log('dsff');" }, function() {
    if (chrome.runtime.lastError) {
         console.log("ERROR: " + chrome.runtime.lastError.message);
    }
});

您会注意到以下错误:

错误:无法访问url"…"的内容。扩展清单必须请求访问此主机的权限。

因此,您需要将适当的主机匹配模式添加到清单中的permissions列表中。例如,为了能够将代码注入任何http/https页面:

"permissions": ["*://*/*"]

此外,如果省略chrome.tabs.executeScript(...)tabId参数,它将应用于当前活动的选项卡(可能会推迟到触发onUpdated事件的选项卡)。因此,也要进行以下更改:

chrome.tabs.executeScript(tab.id, { code: "console.log('dsff');" }, function() {...

首先,为什么对内容和后台脚本都使用相同的文件(background.js)。

内容脚本不能使用chrome.*api的