【问题标题】:Prevent JavaScript redirects in Firefox阻止 Firefox 中的 JavaScript 重定向
【发布时间】:2014-12-29 14:06:38
【问题描述】:

我想阻止一个域 (youtube.com) 在 Firefox 中的 JavaScript 重定向,我想知道是否有一个插件可以做到这一点。我正在尝试使用 NoScript,并且我希望全局允许脚本,因为我不想禁用大多数 JavaScript,但这似乎只允许 JavaScript 重定向。有没有办法让我只禁用 JavaScript 重定向(或者理想情况下,显示一个提示)?

我能想到的唯一另一种方法是编写自己的扩展程序,与window.onbeforeunloadwindow.unload 混在一起,但理想情况下我想使用现有的插件。

【问题讨论】:

  • 你能举个例子吗?使用 GM 脚本可能是可能的。
  • 您可以通过在 http-modify-request 上设置观察者来阻止重定向并测试它是否是重定向,如果是则取消 rquest。如果您需要帮助修改该工作,请参见此处获取代码,让我们知道我们可以将其发布在这里:stackoverflow.com/questions/27483651/…
  • @erosman 示例是什么意思?
  • 重定向是如何实现的?整个页面?页面上的元素? JS会改变位置吗?它是否插入元刷新?导致重定向的 JS 代码是什么?它是从外部源加载的吗?是页面JS的一部分吗?
  • @Jez 你解决过这个问题吗?

标签: firefox firefox-addon noscript


【解决方案1】:
var {utils: Cu, classes: Cc, instances: Ci, results: Cr} = Components
Cu.import('resource://gre/modules/Services.jsm');
var myobserve = function(aSubject, aTopic, aData) {
    var httpChannel = aSubject.QueryInterface(Ci.nsIHttpChannel);


    if (httpChannel.loadFlags & Ci.nsIHttpChannel.LOAD_REPLACE) {
            //its a redirect, lets block it
            httpChannel.cancel(Cr.NS_BINDING_ABORTED);
    }
}

我使用标志的存在来测试重定向。以下是我不久前在旗帜上做的一些笔记,我不完全确定这些笔记的准确性:

  • 如果有 LOAD_DOCUMENT_URI 它通常也有 LOAD_INITIAL_DOCUMENT_URI 如果它的顶部窗口,但在查看源我们只看到 LOAD_DOCUMENT_URI。如果框架我们只看到 LOAD_DOCUMENT_URI。 js css 文件等(我认为只有一些 imgs 会触发 http 修改,不确定,也许所有但如果缓存则不会)带有 LOAD_CLASSIFY_URI 或没有标志 (0)
  • 但是请注意,如果存在重定向,您将在初始时获得 LOAD_DOC_URI 和 LOAD_INIT_DOC_URI,然后在随后的重定向中获得,直到最终重定向。所有重定向都有 LOAD_REPLACE 标志
  • 注意:我认为所有的 imgs 都会抛出 http-on-modify 但 cahced 图像不会。图片也可以有 LOAD_REPLACE 标志

当然要开始观察了:

Services.obs.addObserver(myobserve, 'http-on-modify-request', false);

然后停下来:

Services.obs.removeObserver(myobserve, 'http-on-modify-request', false);

【讨论】:

  • 作为最终用户,我将如何实现这一点?我想阻止 JavaScript 被允许重定向页面,或者至少不允许被允许。
  • @WackGet 这是用于 Firefox 扩展的,您必须下载一个扩展来执行此操作。可能有很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
相关资源
最近更新 更多