Запретить переадресацию JavaScript в Firefox

Я хочу запретить переадресацию JavaScript в Firefox для одного домена (youtube.com), и мне было интересно, есть ли плагин, который это сделает. Я пытаюсь использовать NoScript, и я хотел бы разрешить сценарии глобально, потому что я не хочу отключать большую часть JavaScript, но, похоже, это просто разрешает перенаправления JavaScript. Есть ли способ просто отключить перенаправления JavaScript (или, в идеале, отобразить подсказку)?

Единственный другой способ, который я могу придумать, - это написать собственное расширение, которое взаимодействует с window.onbeforeunload и window.unload, но в идеале я хотел бы использовать существующий аддон.


person Jez    schedule 29.12.2014    source источник
comment
Можете ли вы привести пример? Это может быть возможно с помощью скрипта GM.   -  person erosman    schedule 29.12.2014
comment
Вы можете заблокировать перенаправления, настроив наблюдателя на http-modify-request и проверить, является ли это перенаправлением, и если это так, то отмените запрос. См. здесь код, если вам нужна помощь в изменении этой работы, сообщите нам, что мы можем опубликовать ее здесь: stackoverflow.com/questions/27483651/   -  person Noitidart    schedule 29.12.2014
comment
@erosman Что ты имеешь в виду под примером?   -  person Jez    schedule 30.12.2014
comment
Как реализован редирект? Всю страницу? элементы на странице? Изменяет ли JS местоположение? Он вставляет мета-обновление? Какой код JS вызывает перенаправление? Загружается ли он из внешнего источника? Это часть страницы JS?   -  person erosman    schedule 30.12.2014


Ответы (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 fire http изменяют, не уверен, может быть, все, но не в кэше) приходят с LOAD_CLASSIFY_URI или без флагов (0)
  • однако обратите внимание, что если есть перенаправление, вы получите LOAD_DOC_URI и LOAD_INIT_DOC_URI при начальном, а затем при последующих перенаправлениях до окончательного перенаправления. Все перенаправления имеют флаг LOAD_REPLACE, хотя
  • примечание: я думаю, что все imgs выдают http-on-modify, но кешированные изображения этого не делают. изображения также могут иметь флаг LOAD_REPLACE

Конечно для начала наблюдения:

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

и остановить:

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