javascript - Chrome 扩展程序可将代码注入(inject)到某些预定义的 URls 中

标签 javascript google-chrome-extension

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {
    chrome.tabs.query({active: true,lastFocusedWindow: true}, function(tabs) {
     var tab = tabs[0];
     if(tab.url.indexOf("local")>-1){
        function(tab){
        alert("Test");
        chrome.tabs.executeScript(null,{code:"document.body.style.backgroundColor='yellow'"});
        console.log("injected");
     }
}
      }

  }
});

这是manifest.json:

{
  "manifest_version": 2,
  "name": "Environment Locator",
  "description": "My Extension",
  "version": "1.0",

  "permissions": [
    "tabs"
      ],

  "background": {
    "scripts": ["background.js"] ,
     "persistent": false
  }
}

我想使用 chrome 扩展将一些 js 代码注入(inject)到 URL 包含一些预定义字符串的页面中。 1.我希望这段代码会显示在所有页面中。当选项卡更新时,应再次检查 url。 2. 无需任何用户点击即可运行扩展。没有弹出窗口。

最佳答案

程序化注入(inject)

如果内容脚本是从后台页面脚本注入(inject)的,则 list 的 "permissions"应包含 allowed urls ,或"<all_urls>"允许在所有支持的 url 上进行注入(inject)。当开发带有后台页面的扩展时,您必须使用 the background page debugger您会立即看到缺少权限的错误。

声明式注入(inject)

如果唯一要改变的是 CSS 样式,则根本不需要后台脚本或任何 js!
声明 CSS content script在匹配 URL 上运行的 manifest.json 中:

"content_scripts": [{
    "matches": ["*://*/*local*"],
    "css": ["style.css"],
    "run_at": "document_start"
}],

和 style.css:

body {
    background-color: yellow !important;
}

关于javascript - Chrome 扩展程序可将代码注入(inject)到某些预定义的 URls 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39233690/

相关文章:

javascript - 在 Nuxt.js 中从正文中删除填充

javascript - 使用 js 替换 JavaScript 数组对象的值

c - 将数据从 Host App 发送到 Chrome 扩展

javascript - 禁用复制和粘贴

google-chrome - 带有 '403: Daily Limit Exceeded' 的日历 API 响应 - Google Chrome 扩展

javascript - Jquery 提交与 javascript 提交

javascript - 自定义事件参数未在测试中正确传递

javascript - 如何在具有弹出页面的页面加载时注入(inject)内容脚本?

javascript - Chrome(uBlock 扩展)在网站访问期间插入 googletagmanager

javascript - 如何按顺序向各种按钮添加功能