Я работаю над простым расширением firefox, которое отслеживает запрашиваемый url и вызывает веб-службу на заднем плане, которая определяет, является ли URL подозрительным или нет, и на основе полученного результата службой, расширение решает остановить загрузку страницы и предупредить пользователя о случае подделки или что-то еще, и если пользователь по-прежнему хочет перейти на эту страницу, он может перенаправляться на исходную страницу, которую он запросил дляРасширение Firefox: остановка загрузки страницы при обнаружении подозрительного URL
I добавил HTTP-на-изменение-запрос наблюдателя
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(requestObserverListener.observe, "http-on-modify-request", false);
и наблюдатель
var requestObserverListener = {observe: function (subject, topic, data) {
//alert("Inside observe");
if (topic == "http-on-modify-request") {
subject.QueryInterface(Components.interfaces.nsIHttpChannel);
var url = subject.URI.spec; //url being requested. you might want this for something else
//alert("inside modify request");
var urlbarvalue = document.getElementById("urlbar").value;
urlbarvalue = processUrl(urlbarvalue, url);
//alert("url bar: "+urlbarvalue);
//alert("url: "+url);
document.getElementById("urlbar").style.backgroundColor = "white";
if(urlbarvalue == url && url != "")
{
var browser = getWindowForRequest(subject);
if (browser != null) {
//alert(""+browser.contentDocument.body.innerHTML);
alert("inside browser: "+url);
getXmlHttpRequest(url);
}
}
}
},
}
так, когда URL в URLbar и запрошенный URL соответствует REST службы будет называться через AJAX getXmlHttpRequest (URL); метод
теперь, когда я бегу этот внутренний вызов сделан на службу, но до сервиса вернуть какой-либо ответ страница будет загружаться, не подходит, так как пользователь может ввести свои учетные данные в это время и компрометации
Я хочу сначала отобразить пользователю предупреждение на вкладке браузера, и если он все еще хочет посетить эту страницу, он может быть перенаправлен на эту страницу по ссылке, нажав в окне предупреждающих сообщений.
subject.suspend() и subject.resume() работают как ожидалось, но subject.cancel (Components.results.NS_BINDING_SUCCEEDED) не отменяет запрос, а запрос все еще находится в состоянии приостановления. –
О, это, вероятно, ошибка копирования/вставки в коде. Я считаю, что вы хотите: subject.cancel (Components.results.NS_BINDING_ABORTED); –