在所有网页上的Chrome userscript火灾尽管@match和@include设置(Chro

2019-09-02 02:34发布

我用比赛来限制我的脚本工作只有一个域名,但镀铬运行时,它在每一个领域。 我试图@include@match和它说:“访问所有网站上的数据”当我尝试安装它,它运行它的所有网站。

我怎样才能限制userscript在Chrome中一个域?

元数据是相同的,因为这页: http://www.chromium.org/developers/design-documents/user-scripts

我的意思是:

// @match http://*.google.com/*
// @match http://www.google.com/*

Answer 1:

注意:这个答案的OP和Rob W.这里将其放置在希望,这个问题可能是有用的人之间的开发,而无需通过评论链进行筛选,上面。


有两个问题。 首先, 一个标头userscript不分析如果UTF8 BOM存在 (铬错误102667)。

二,使用时@include@match在userscript,Chrome的误导性报道,该脚本可以“在所有网站上访问你的数据”,但这不是真的。 该脚本将运行在仅由包含语句中指定这些网站。

考虑(或做)这三个脚本:

UTF测试,不UTF.user.js(使用ANSI编码保存):

// ==UserScript==
// @name    Not UTF source file
// @match   http://www.yahoo.com/*
// ==/UserScript==
if (location.hostname != 'www.yahoo.com')
  alert ("This script should not run on "+location.hostname+"!");


UTF试验,是UTF.user.js(保存UTF-8编码,包括BOM):

// ==UserScript==
// @name    Is UTF source file
// @match   http://www.yahoo.com/*
// ==/UserScript==
if (location.hostname != 'www.yahoo.com')
  alert ("This script should not run on "+location.hostname+"!");


包括,不match.user.js(使用ANSI编码保存):

// ==UserScript==
// @name    Use include, not match
// @include http://www.yahoo.com/*
// ==/UserScript==
if (location.hostname != 'www.yahoo.com')
  alert ("This script should not run on "+location.hostname+"!");


请注意,所有3个脚本都是相同的代码。 只有@name和/或文件格式和/或@include@match是不同的。


在ANSI脚本,与之相匹配的(UTF测试,不UTF.user.js)报告这些权限:


这个脚本运行和报告正确,并符合市场预期。


的UTF-8脚本,与匹配(UTF试验,是UTF.user.js)报道这些权限:


权限报告错误,顶撞@match声明(S)。 还要注意的是,文件名显示,URL编码,而不是@name指令。 这些都是线索有什么不妥。

更糟的是, 这个脚本会在所有网站上运行。 也就是说,你将看到alert()在所有非雅虎页面。 这显然是一个错误 。


在ANSI脚本,与包括( 包括未match.user.js)报告这些权限:


虽然这是一个误导性的报告,该脚本实际上将正常运行。 也就是说,将仅针对雅虎的网页。

这是部分原因是由于Chrome浏览器自动转换成userscripts扩展。 @match语句直接转换成manifest.jsonmatches特性,而@include语句做成include_globs值。 见匹配模式和水珠 。 该报告的权限关闭键matches阵列。



文章来源: Chrome userscript fires on all pages despite @match and @include settings