Я хочу изменить поведение JavaScript, используемого для отображения баннера, поступающего из центрального источника.
Сегодня я включаю в код встроенный тег скрипта, например:
<script type = "text/javascript" src = "http://banner.com/b?id=1234"></script>
Но это возвращает код, который использует document.write, например:
if (condition) {
document.write('<a href = "..."><img src = "..." /></a>')
}
Я хочу как-то переопределить этот document.write и, возможно, оценить возвращаемый код и вместо этого использовать JavaScript-фреймворк для привязки кода к элементу div при готовности DOM.
Есть способ сделать это? Что-то вроде этого?:
OnDOMReady() {
BindBanner(1234);
}
BindBanner(bannerId) {
var divTag = document.getElementById('banner_' + bannerId);
divTag.innerHtml = ManipulatedReturenedCode(bannerId);
}
Может ли прототипирование JavaScript справиться с чем-то подобным?
Редактировать: Он должен быть водонепроницаемым, кроссплатформенным, кроссбраузерным, поэтому я не знаю, можно ли заменить document.write.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы пробовали переопределить document.write? У меня нет времени пробовать прямо сейчас, но попробуй:
var foo = document.write;
var bannerCode = '';
document.write = function(str) { bannerCode += str; };
Затем включите файл сценария, затем выполните
document.write = foo;
alert(bannerCode);
Почему бы не использовать jQuery? Он имеет функцию готовности DOM:
$.ready(function() {
});
Затем вы можете легко манипулировать элементом, используя
$("#div_id").html
Да, вы можете переопределить document.write. В прототипировании нет необходимости, вы можете сделать это непосредственно на самом объекте документа. Обычно я делаю это для анализа вредоносных программ, но его, безусловно, можно использовать для захвата вывода рекламного скрипта, если рекламный скрипт не выполняет какой-либо особенно запутанной обработки, которая могла бы выявить разницу между document.write и тем, чем вы его заменили. .
Вот оболочка, загружающая объявление (немного позже, чем DOMReady):
<div id = "advertgoeshere"></div>
<script type = "text/javascript">
function rewrite(w) {
document.getElementById('advertgoeshere').innerHTML+= w;
}
window.onload= function() {
document.write= rewrite;
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= 'http://externalsite/ads.js';
document.body.appendChild(script);
}
</script>
Да, но я должен заставить объект 'html' не document.write, а отображать содержимое в html.