Я пытаюсь перехватить вызовы document.write для всех страниц. Настройка перехвата внутри страницы путем внедрения скрипта, подобного
function overrideDocWrite() {
alert("Override called");
document.write = function(w) {
return function(s) {
alert("special dom");
w.call(this, wrapString(s));
};
}(document.write);
alert("Override finished");
}
Это просто и работает, но я бы хотел, чтобы мое расширение настроило перехват для каждого объекта документа изнутри расширения. Я не мог найти способ сделать это. Я попытался прослушать событие «загрузки» и настроить там перехват, но это также не удается. Как перехватить звонки на doc.write
с добавочного номера?
Я добился определенного прогресса:
var myExtension = {
init: function() {
var appcontent = document.getElementById("appcontent"); // browser
if (appcontent)
appcontent.addEventListener("DOMContentLoaded", myExtension.onPageLoad,
true);
},
onPageLoad: function(aEvent) {
var doc = aEvent.originalTarget; // doc is document that triggered "onload" event
// do something with the loaded page.
// doc.location is a Location object (see below for a link).
// You can use it to make your code executed on certain pages only.
alert("Override called");
alert(doc);
alert(doc.write);
alert(doc.wrappedJSObject);
alert(doc.wrappedJSObject.write);
doc.wrappedJSObject.write = function(w) {
return function(s) {
alert("special dom");
w.call(this, "(" + s + ")");
};
}(doc.write);
alert("Override finished");
}
}
Кажется, это работает, но DOMContentLoaded - неправильное событие для задания, потому что оно запускается слишком поздно! Есть ли раннее событие для прослушивания?