我正在使用两个不同的内容脚本构建Safari扩展。需要将一个脚本注入所有http页面(但不是https页面)。另一个只会被注入google.com页面,无论方案如何。
为了实现这一目标,我已将Extension Website Access
设置为:
这应该意味着在高级别,我的扩展程序中的内容脚本应该能够访问所有页面。
为了获得更细粒度的控制,我然后以编程方式将内容脚本注入到符合我模式的URL中。
App = {
content: {
// Inject into unsecure pages.
whitelist: ['http://*/*'],
// But not into secure pages.
blackList: ['https://*/*'],
loc: safari.extension.baseURI + 'data/content.js'
},
results: {
// Inject this script into all google.com pages
whiteList: ['http://*.google.com/*', 'https://*.google.com/*'],
// Surely I don't need a blacklist if I specify a whitelist?
blacklist: undefined,
loc: safari.extension.baseURI + 'data/results.js',
}
};
// Inject the first content script.
safari.extension.addContentScriptFromURL(App.content.loc,
App.content.whitelist, App.content.blacklist, false);
// Inject the second content script.
safari.extension.addContentStyleSheetFromURL(App.results.cssLoc,
App.results.whitelist, App.results.blacklist, false);
问题是两个脚本都被注入到所有页面中。就好像我的白人和黑名单什么都不做。我做错了什么?
答案 0 :(得分:2)
我在顶部的清单/黑名单定义中使用了大写字母:
App = {
content: {
blackList: ['https://*/*'],
},
results: {
whiteList: ['http://*.google.com/*', 'https://*.google.com/*']
}
};
但是当我将列表传递给脚本注入函数时,使用非大写的变量版本。
safari.extension.addContentScriptFromURL(App.content.loc, App.content.whitelist, App.content.blacklist, false);
这显然意味着undefined
被传递到注入函数而不是实际的白名单/黑名单。