Предотвратить перенаправления JavaScript в Firefox
Я хочу предотвратить перенаправления JavaScript в Firefox для одного домена (youtube.com), и мне было интересно, есть ли плагин, который будет это делать. Я пытаюсь использовать NoScript, и я хотел бы разрешить сценарии глобально, потому что я не хочу отключать большинство JavaScript, но это, кажется, просто позволяет перенаправления JavaScript. Есть ли способ для меня, чтобы просто отключить перенаправления JavaScript (или в идеале, отображать подсказку)?
Единственный другой способ сделать это - написать собственное расширение, которое мешает window.onbeforeunload
а также window.unload
, но в идеале я хотел бы использовать существующий аддон.
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);
}
}
Я использую наличие флагов для проверки перенаправления. Вот некоторые заметки, которые я сделал на флагах некоторое время назад, я не совсем уверен, насколько точны эти заметки:
- if имеет 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-на-модифицировать, но cahced изображения не делают. изображения также могут иметь флаг LOAD_REPLACE
Конечно, чтобы начать наблюдение:
Services.obs.addObserver(myobserve, 'http-on-modify-request', false);
и остановиться
Services.obs.removeObserver(myobserve, 'http-on-modify-request', false);