内容脚本是否可以访问newtab页面?

时间:2016-08-15 03:33:54

标签: google-chrome google-chrome-extension chromium

更新

感谢@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页面中正常运行?

一些有用的信息:

  1. 我知道默认情况下,Chrome扩展程序无法访问chrome://页面,我们可以通过chrome://flags/#extensions-on-chrome-urls

  2. 更改此行为
  3. chrome://newtab实际上是一个类似https://www.google.co.jp/_/chrome/newtab?espv=2&ie=UTF-8的网址,因此不应受上述限制阻止。

  4. 可以使用许多鼠标手势扩展程序,例如crxMouse,它们在chrome://newtab页面上运行良好

  5. 还有一些声音表示不允许在chrome://newtab中注入内容脚本,例如,@ Xan的评论this answer enter image description herethis author's case enter image description here

  6. 因此它在不同设备(或设置?)中的不同行为看起来很奇怪。是否有关于内容脚本是否可以在chrome://newtab页面中运行的官方声明?或者我们可以改变这种行为吗?

2 个答案:

答案 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 。这一次什么都不会发生。