Możliwe jest zastąpienie metody document.write. Możesz więc buforować ciągi wysyłane do document.write i wyprowadzać bufor tam, gdzie chcesz. Jednak zmiana skryptu z synchronicznego na asynchroniczny może powodować błędy, jeśli nie jest obsługiwana poprawnie. Oto przykład:
wymiana document.write Zmniejsz
(function() {
// WARNING: This is just a simplified example
// to illustrate a problem.
// Do NOT use this code!
var buffer = [];
document.write = function(str) {
// Every time document.write is called push
// the data into buffer. document.write can
// be called from anywhere, so we also need
// a mechanism for multiple positions if
// that's needed.
buffer.push(str);
};
function flushBuffer() {
// Join everything in the buffer to one string and put
// inside the element we want the output.
var output = buffer.join('');
document.getElementById("ad-position-1").innerHTML = output;
}
// Inject the thid-party script dynamically and
// call flushBuffer when the script is loaded
// (and executed).
var script = document.createElement("script");
script.onload = flushBuffer;
script.src = "http://someadserver.com/example.js";
})();
Zawartość http://someadserver.com/example.js
var flashAdObject = "<object>...</object>";
document.write("<div id='example'></div>");
// Since we buffer the data the getElementById will fail
var example = document.getElementById("example");
example.innerHTML = flashAdObject; // ReferenceError: example is not defined
mam udokumentowane różne problemy, z jaką się spotkałem podczas pisania i za pomocą mojego Zastąpienie dokumentu: https://github.com/gregersrygg/crapLoader/wiki/What-to-think-about-when-replacing-document.write
Ale niebezpieczeństwo związane z użyciem zamiennika document.write to wszystkie nieznane problemy, które mogą się pojawić. Niektórych nie da się obejść.
document.write("<scr"+"ipt src='http://someadserver.com/adLib.js'></scr"+"ipt>");
adLib.doSomething(); // ReferenceError: adLib is not defined
Na szczęście ja nie natknąć powyższego problemu w środowisku naturalnym, ale to nie gwarantuje, że nie będzie się działo;)
Nadal chcesz go wypróbować? Wypróbuj crapLoader (moja) lub writeCapture:
Powinieneś również sprawdzić friendly iframes. Zasadniczo tworzy on element iframe tej samej domeny i ładuje wszystko tam, zamiast w dokumencie. Niestety nie znalazłem żadnych dobrych bibliotek do obsługi tego jeszcze.
to pobrany skrypt innej firmy, aby można go było edytować?Myślę, że to może być lepsze rozwiązanie niż hackowanie 'document.write()' – peirix
Mój przykład minął. Miałem na myśli: document.write ('<' + 'div'); document.write ('>' + 'Treść tekstowa' + '<'); document.write ('\ div>') –
Mogę go edytować, ale oprócz pełnego parsowania JS, czy istnieje sposób na zagwarantowanie poprawnego działania edytowanego kodu? –