我用比赛来限制我的脚本工作只有一个域名,但镀铬运行时,它在每一个领域。 我试图@include
和@match
和它说:“访问所有网站上的数据”当我尝试安装它,它运行它的所有网站。
我怎样才能限制userscript在Chrome中一个域?
元数据是相同的,因为这页: http://www.chromium.org/developers/design-documents/user-scripts
我的意思是:
// @match http://*.google.com/*
// @match http://www.google.com/*
注意:这个答案的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.json
的matches
特性,而@include
语句做成include_globs
值。 见匹配模式和水珠 。 该报告的权限关闭键matches
阵列。