我使用match来限制我的脚本只能使用一个域,但chrome会在每个域中运行它。我尝试了@include
和@match
,当我尝试安装它并在所有网站上运行时,它会说“在所有网站上访问您的数据”。
如何在Chrome中将用户限制为一个域?
元数据与此页面相同:http://www.chromium.org/developers/design-documents/user-scripts
我的意思是:
// @match http://*.google.com/*
// @match http://www.google.com/*
答案 0 :(得分:7)
注意:这个答案是在OP和Rob W.之间形成的 希望这个问题对其他人没有用 不得不筛选上面的评论链。
有两个问题。首先,a userscript header does not parse if a UTF8 BOM is present(Chromium bug 102667)。
其次,在用户名中使用@include
与@match
时,Chrome误导性地报告该脚本可以“在所有网站上访问您的数据”,但事实并非如此。该脚本仅在include语句指定的那些站点上运行。
考虑(或制作)这三个脚本:
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+"!");
包括,不匹配.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
不同。
带有匹配( UTF测试,而不是UTF.user.js )的ANSI脚本报告这些权限:
该脚本可以正常运行和报告,并且符合预期。
匹配( UTF测试,UTF.user.js )的UTF-8脚本报告这些权限:
权限报告不正确,与@match
语句相矛盾。另请注意,文件名显示为URL编码,而不是@name
指令。这些都是有些不对劲的线索。
更糟糕的是,此脚本将在所有网站上运行。也就是说,您将在所有非Yahoo网页上看到alert()
。这显然是a bug。
ANSI脚本包含( Include,not match.user.js )报告这些权限:
虽然这是一个误导性的报告,但该脚本实际上会正常运行。也就是说,它只会触发雅虎页面。
这部分归功于Chrome如何将用户脚本自动转换为扩展程序。 @match
语句会直接转换为manifest.json
的{{1}}属性,而matches
语句会转换为@include
个值。见Match patterns and globs。
权限报告关键include_globs
数组。