我想在Firefox中阻止一个域(youtube.com)的JavaScript重定向,我想知道是否有一个插件可以执行此操作。我正在尝试使用NoScript,我想全局允许脚本,因为我不想禁用大多数JavaScript,但这似乎只允许JavaScript重定向。有没有办法让我只禁用JavaScript重定向(或理想情况下,显示提示)?
我能想到的唯一另一种方法就是编写我自己的扩展程序,它与window.onbeforeunload
和window.unload
混淆,但理想情况下我想使用现有的插件。
答案 0 :(得分: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标志tho
- 注意:我认为所有的imgs都会抛出http-on-modify但是没有。图像也可以有LOAD_REPLACE标志
当然要开始观察:
Services.obs.addObserver(myobserve, 'http-on-modify-request', false);
并停止:
Services.obs.removeObserver(myobserve, 'http-on-modify-request', false);