Google chrome extension 为特定页面运行Chrome扩展

Google chrome extension 为特定页面运行Chrome扩展,google-chrome-extension,Google Chrome Extension,我正在编写一个简单的Chrome扩展,它显示一个JavaScript警报,上面写着“Hello World”。在这个例子中,我指定扩展只为google.com运行(通过将它放在manifest.json的permissions属性中) 即使目标页面中的所有内容都已加载,警报也不会出现。以下是我目前的脚本: 文件:manifest.json { "name": "Hello", "version": "1.0", "description": "Says hello to Google

我正在编写一个简单的Chrome扩展,它显示一个JavaScript警报,上面写着“Hello World”。在这个例子中,我指定扩展只为google.com运行(通过将它放在manifest.json的permissions属性中)

即使目标页面中的所有内容都已加载,警报也不会出现。以下是我目前的脚本:

文件:manifest.json

{
  "name": "Hello",
  "version": "1.0",
  "description": "Says hello to Google",
  "permissions": ["http://*.google.com/"]
  "browser_action": {
    "popup": "Hello.html"
  }
}
文件:Hello.html

<script language="Javascript">
   alert("Hello World");
</script>

警报(“你好世界”);

您正在添加一个浏览器操作弹出窗口,在浏览器的右上角添加一个按钮。(它可能不可见,因为您尚未为其指定图像。地址栏右侧应有一些空白;请尝试单击它以在弹出窗口中查看您的
Hello.html
。)

你想要的是一个。内容脚本可以注入到Chrome加载的每个页面中。您可以使用清单文件中的
匹配项
排除匹配项
子项来指定获取注入脚本的页面

{
  "name": "Hello",
  "version": "1.0",
  "description": "Says hello to Google",
  "permissions": ["tabs", "*://*.google.com/*"],
  "content_scripts": [
    {
      "matches": ["*://*.google.com/*"],
      "js": ["hello.js"]
    }
  ]
}
确保将
Hello.html
重命名为
Hello.js
(并去掉
标记)


另外请注意,我将您的
http://*.google.com/
更改为
*://*.google.com/*
,这样它将通过http和HTTPS应用于google(并且后面的
*
确保它将应用于
google.com
上的所有页面,而不仅仅是主页).

我找到了这个答案,试图找到一种只在某些页面上启用图标的方法。我就是这样做的

background.js

chrome.runtime.onInstalled.addListener(function() {
  chrome.tabs.onActivated.addListener(async info => {
    const tab = await chrome.tabs.get(info.tabId);
    
    const isGithub = tab.url.startsWith('https://github.com/');
    isGithub 
      ? chrome.action.enable(tab.tabId) 
      : chrome.action.disable(tab.tabId);
  });
});

确保在清单中添加选项卡权限

不需要
选项卡
权限。实际上,不需要所有权限,因为
alert('Hello World!')
没有访问页面的DOM。URL模式遵循非常严格的规则,请看。哇,这些是对其他内容的权限;您确实不需要任何权限来运行内容脚本。(但是,您在内容脚本中执行的特定操作可能需要权限。)“清除
标记”非常重要:由于内容安全策略禁止内联代码,当前形式的扩展正在失败。您在…com之后的第五行缺少逗号/*“]由于您正在更新答案,您还可以将其添加到清单版本2。我不理解此问题的介绍语句。有人能修好吗?非常惊讶这个q有39张选票!这就是我想要的一切。泰!