2

我正在使用两个不同的内容脚本构建一个 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);

问题是这两个脚本都被注入到所有页面中。好像我的白名单和黑名单什么都不做。我究竟做错了什么?

4

1 回答 1

2

我在顶部的 whilelist/blacklist 定义中使用了大写字母:

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被传递到注入函数而不是实际的白名单/黑名单。

于 2012-09-25T14:52:08.923 回答