触发content_script的browser_action失败

browser_action to trigger content_script failed

本文关键字:action 失败 browser script content 触发      更新时间:2023-09-26

我想要的是,当我点击browser_action图标时,网页做了一些css,但它失败了,出现了以下代码,它根本没有响应。知道吗?

清单json文件看起来像这个

{
  "manifest_version": 2,
  "name": "Test",
  "description": "yada yada",
  "version": "1.0",
  "permissions": [
    "https://*/*",
    "tabs"
  ],
    "icons": {
    "128" : "icon.png"
  },
  "browser_action": {
    "default_icon": "icon.png"
  },
      "content_scripts": [
    {
      "matches": [
            "http://*/*",
            "https://*/*"
            ],
      "js": ["jquery.js","request.js"],
      "run_at": "document_end"   
    }
  ]
}

我的请求.js在这里

chrome.browserAction.onClicked.addListener(function (){
  document.body.style.background = 'yellow';
});

据我所知,您希望使用编程注入来更改相关页面的css。为此,您的清单.json应包括以下权限:

  "permissions": [
    "activeTab"
  ],

访问chrome.*API在内容脚本中受到限制

一旦设置了权限,就可以通过调用tabs.executeScript将JavaScript注入页面。要注入CSS,请使用tabs.insertCSS.

所以你会想做这样的事情(注入javascript代码):

 chrome.browserAction.onClicked.addListener(function(tab) {
   chrome.tabs.executeScript({
    code: 'document.body.style.backgroundColor="yellow"'
   });
 });

或者,您可以使用activeTab上文档中描述的insertCss方法,如下所示:

 chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.insertCSS(tab.id, {
         code: 'document.body.style.backgroundColor="yellow"'
    });
 });

再次从文档:

如果您的内容脚本的代码应该始终被注入,请使用content_scripts字段将其注册到扩展清单中,如以下示例所示-

 "content_scripts": [
 {
  "matches": ["http://www.google.com/*"],
  "css": ["mystyles.css"], //mystyle.css gets injected into the relevant pages.
  "js": ["jquery.js", "myscript.js"]
 }
],

EDIT-我应该早些时候明确说明这一点,但文档明确表示内容脚本不能

使用chrome.*API,例外为:扩展名(getURL,inIncognitoContext,lastError,onRequest,sendRequest)

因此,您不能在内容脚本中执行以下操作(我想知道它是如何为您工作的):

chrome.browserAction.onClicked.addListener(function callback)

也就是说,您确实可以访问后台页面中的browserAction API。它需要这样的东西:

manifest.json

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

background.js:

 chrome.browserAction.onClicked.addListener(function(tab) {
   chrome.tabs.executeScript({
    code: 'document.body.style.backgroundColor="yellow"'
   });
 });

本质上,在后台页面中使用chrome.browserAction,因为内容脚本不支持它。我希望我能澄清我的观点,这将有助于你解决问题。