允许来自特定站点的“阻止对象”

Jur*_*ura 8 firefox noscript

我想允许使用 NoScript FireFox 插件的某些站点使用“被阻止的对象”,包括字体。

我理解为什么 NoScript 会阻止 fonts,但对于一些受信任的网站,我仍然希望允许它们。

我阅读了如何仅允许来自一个域的脚本以及如何启用ABE 手册之外的某些特定脚本。但我无法让它发挥作用。这里有一些我为 Toggl 尝试过的 ABE 规则:

Site .gstatic.com .bootstrapcdn.com
Accept from .toggl.com

Site fonts.gstatic.com maxcdn.bootstrapcdn.com
Accept INCLUSION(SCRIPT, OBJ, CSS) from .toggl.com

Site fonts.gstatic.com maxcdn.bootstrapcdn.com
Accept from .toggl.com
Run Code Online (Sandbox Code Playgroud)

然而,这些规则集都不允许 Toggl 包含字体。你明白我哪里错了吗?

(FireFox 34.0.5 上的 NoScript 2.6.9.6rc3)

Bar*_*art 5

无脚本的网站状态:

例如,将noscript.allowedMimeRegExp首选项值设置为

  • FRAME@https?://somesite\.com
  • FONT@https?://some-other-site\.com
  • WebGL@https://www\.khronos\.org

将永久允许来自 somesite.com 的任何 FRAME/IFRAME 加载、来自 some-other-site.com 的网络字体和来自https://www.khronos.org.

我不认为 ABE 可以做到。一种只为特定站点/域启用字体的黑客方法是使用 Vimperator/Pentadactyl 并在 LocationChange 事件上自动更改 MimeRegExp 设置。要在离开页面时恢复设置,您可以在 .vimperatorrc 中使用这个简单的函数(从Anekos 获取),该函数使用具有负前瞻的表达式:

js <<EOM
function add_AutoCommand(URI, onEnter, onLeave) {
    let entered = false;
    autocommands.add('LocationChange', '(?!' + URI + ')', function () {
      if (entered) {
        entered = false;
        onLeave();
      }
    });
    autocommands.add('LocationChange', URI, function () {
        onEnter();
        entered = true;
    });
}
add_AutoCommand(https?://allow-font-on-this-site\.com, 
    :set! noscript.allowedMimeRegExp="FONT@https?://some-other-site\.com", 
    :set! noscript.allowedMimeRegExp=" "
);
EOM
Run Code Online (Sandbox Code Playgroud)

我还没有测试过这个,但我会。

编辑:应该是

add_AutoCommand('https?:\/\/allow-font-on-this-site\\.com.*', 
    function(){options.setPref("noscript.allowedMimeRegExp",
        "FONT@http://fonts.gstatic.com")}, 
    function(){options.setPref("noscript.allowedMimeRegExp", 
        "")}
);
Run Code Online (Sandbox Code Playgroud)

...但是除非重新加载页面,否则 noscript 不会选择首选项,因此要么手动重新加载,要么使用 tabs.reload(config.browser.mCurrentTab, false);

似乎您应该设置一个布尔值和一个超时以防止 LocationChange 再次执行(因此,循环)重新加载。也许 PageLoadPre 事件上的另一个 autocmd 可能用于布尔值。我知道这变得很丑陋。对不起。

附:简单的基于 URL 的首选项切换的更有用的应用程序显然是更改下载目录。

编辑(2017 年):使用uBlock Origin,您可以专门针对某些类型的 html 对象、文件或行为。

动态和静态规则都指定允许域/url 的来源。我已经使用这个几年了。类型包括font以及inline-scriptstylesheetimageobjectscriptxmlhttprequestsub_framemediawebsocketpopunderpopup

示例规则:

* * 3p block
no-remote-fonts: * true
no-remote-fonts: allow-font-on-this-site.com false
allow-font-on-this-site.com font-cdn.org noop
Run Code Online (Sandbox Code Playgroud)

也就是说:

  1. 阻止从任何页面到任何地方的第三方请求
  2. 从任何地方阻止任何页面上的第三方字体
  3. 从任何地方在域allow-font-on-this-site.com的页面上重新启用第三方字体
  4. 可选地在我们的页面上重新启用对域 font-cdn.org 源的请求

使用noop(“无操作”),我们仍然应用静态规则过滤(通常在称为广告阻止或恶意广告列表的分布式规则中定义)。