感谢@kofifus提供的信息,Chrome浏览器的默认新标签页上有61 explicitly forbids个内容脚本
假设我有以下示例扩展名,它将在控制台中输出test
。
的manifest.json
{
"name": "Test",
"version": "1.0",
"manifest_version": 2,
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"content.js"
]
}
]
}
content.js
console.log('test');
上述扩展程序是否会在chrome://newtab
页面中正常运行?
一些有用的信息:
我知道默认情况下,Chrome扩展程序无法访问chrome://
页面,我们可以通过chrome://flags/#extensions-on-chrome-urls
chrome://newtab
实际上是一个类似https://www.google.co.jp/_/chrome/newtab?espv=2&ie=UTF-8
的网址,因此不应受上述限制阻止。
可以使用许多鼠标手势扩展程序,例如crxMouse,它们在chrome://newtab
页面上运行良好
还有一些声音表示不允许在chrome://newtab
中注入内容脚本,例如,@ Xan的评论this answer
和this author's case
因此它在不同设备(或设置?)中的不同行为看起来很奇怪。是否有关于内容脚本是否可以在chrome://newtab
页面中运行的官方声明?或者我们可以改变这种行为吗?
答案 0 :(得分:3)
Chrome浏览器的默认新标签页上有61 explicitly forbids个内容脚本
答案 1 :(得分:0)
问:是否有关于内容脚本是否可以在chrome:// newtab页面中运行的官方声明?
答:不是,但Google's documentation表示:
主机权限和内容脚本匹配基于匹配模式定义的一组URL。匹配模式本质上是一个以允许的方案(http,https,文件或ftp,并且可以包含'*'字符开头的URL。特殊模式匹配以允许的方案开头的任何URL。
chrome://newtab
仅将用户重定向到设置为新标签页的网址。通常会将用户重定向到https://<your local google domain>/_/chrome/newtab
(允许的匹配模式)。但是,如果其他扩展程序将新标签页设置为customNewTab.html
,则chrome://newtab
会将用户重定向到chrome-extension://chrome-id/customNewTab.html
,并且任何其他扩展程序的内容脚本都无法在新标签页上运行。
This SA question也证实了这一点。如果您尝试将"exclude_matches": ["*://*/_/chrome/newtab*"],
添加到清单中,则内容脚本将停止在新标签页上工作。
问:是否有可能改变此行为的设置?
在另一个扩展程序设置的覆盖页面旁边没有。 (请注意,主题仅更改新选项卡的外观,并且不会覆盖新选项卡URL)
问:上述扩展程序在chrome:// newtab页面中是否可以正常工作?
答:是的,除非该标签被另一个扩展名覆盖。
我在扩展程序商店中有一个名为Screen Shader的30,000个用户扩展程序,其中包含各种不同的Chrome版本和一些不同的浏览器,到目前为止,当他们抱怨时,没有人抱怨它没有在新的标签页上工作其他很多东西。
我不太确定为什么其他人认为它不应该在新的标签页上工作,但希望这能回答你所有的问题。
旁注:新标签页中的Keypress问题
在他http://www.toptip.ca/2010/01/google-chrome-content-script.html的博文中,"Boss Key and Button"的开发人员抱怨在新标签页中运行内容脚本的问题。当您按 F9 时,他的扩展程序会最小化所有镀铬窗口,并在新选项卡中打开您当前所在的窗口。他认为内容脚本在新标签页上不起作用,因为每当他在新标签页中使用他的快捷方式时,都没有发生任何事情。他没有意识到它没有在新标签页上工作的原因是因为chrome将任何按键重定向到浏览器栏,因此他的内容脚本无法捕获按键。
尝试使用他的扩展名并在随机页面上按 F9 。所有镀铬窗口都将最小化。返回到该随机页面,然后单击地址栏并尝试按 F9 。这一次什么都不会发生。