【问题标题】:Does content script have access to newtab page?内容脚本是否可以访问新标签页?
【发布时间】:2016-08-15 03:33:54
【问题描述】:

更新

感谢@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. chrome://newtab实际上是一个类似https://www.google.co.jp/_/chrome/newtab?espv=2&amp;ie=UTF-8的url,所以不应该被上述限制阻止。

  3. 有很多鼠标手势扩展可用,例如crxMouse,它们在chrome://newtab 页面上运行良好

  4. 还有一些声音说chrome://newtab中不允许注入内容脚本,比如@Xan的cmets下面this answer 和this author's case

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

【问题讨论】:

  • @wOxxOm,见#4,也有声音说不允许将内容脚本注入chrome://newtab
  • 请注意,对于我的评论 #4,我真的不知道。这是我有根据的猜测。
  • @Xan,事实上我听到了很多关于新标签页中内容脚本行为不一致的声音。根据我自己的经验,大多数时候它在新标签页中运行良好,但我确实遇到过它不起作用的情况。
  • @wOxxOm,问题是,newtab 中的内容脚本行为不一致。有些人觉得它不起作用,而另一些人觉得它很好用,他们都只是将匹配项声明为&lt;all_urls&gt;,而没有做任何其他事情。我想知道造成这种情况的原因,如果有设置我们可以改变这种行为。
  • @wOxxOm,但也有一些人发现它不起作用(参见帖子中的示例),即使他们声明了&lt;all_urls&gt;

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


【解决方案1】:

Chrome 的默认新标签页上有 61 个 explicitly forbids 内容脚本

【讨论】:

  • 感谢您的信息!
【解决方案2】:

问:关于内容脚本是否可以在 chrome://newtab 页面中运行,是否有官方声明?

A:不是真的,但Google's documentation 声明:

主机权限和内容脚本匹配基于匹配模式定义的一组 URL。匹配模式本质上是一个以允许的方案(http、https、文件或 ftp)开头的 URL,并且可以包含“*”字符。特殊模式匹配任何以允许的方案开头的 URL。

chrome://newtab 只会将用户重定向到设置为新标签页的任何 url。 通常它将用户重定向到 https://&lt;your local google domain&gt;/_/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 版本和几种不同的浏览器,到目前为止,当他们抱怨时,没有人抱怨它在新标签页上不起作用很多关于其他的事情。

我不太清楚为什么其他人认为它不应该在新标签页上工作,但希望这能回答你的所有问题。

旁注:新标签页的按键问题

"Boss Key and Button" 的开发者在其http://www.toptip.ca/2010/01/google-chrome-content-script.html 的博文中抱怨在新标签页中运行内容脚本的问题。他的扩展程序会最小化所有 chrome 窗口,并在您按下 F9 时在新选项卡中打开您当前所在的窗口。他认为内容脚本在新标签页上不起作用,因为每当他在新标签页中使用快捷方式时,什么都没有发生。他没有意识到它无法在新标签页上运行的原因是因为 chrome 会将任何按键重定向到浏览器栏,因此他的内容脚本无法捕获按键。

尝试使用他的扩展并在随机页面上按 F9。所有 chrome 窗口都将被最小化。返回该随机页面,然后单击地址栏并尝试按F9。这一次什么都不会发生。

【讨论】:

  • 主题是否算作扩展?
  • @pyon 一个主题只会改变背景图片和页面中的一些样式,所以它不会覆盖默认的新标签 url。
  • 我的新标签页似乎将我重定向到 chrome-search://local-ntp/local-ntp.html 而不是谷歌域,我无法在此处注入内容脚本。有没有办法在这里注入内容脚本?我已经在清单的权限中指定了
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多