JavaScript: изменение кода баннера - PullRequest
0 голосов
/ 25 ноября 2008

Я хочу изменить поведение 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 ready.

Есть ли способ сделать это? Как то так?:

OnDOMReady() {
    BindBanner(1234);
}
BindBanner(bannerId) {
    var divTag = document.getElementById('banner_' + bannerId);
    divTag.innerHtml = ManipulatedReturenedCode(bannerId);
}

Может ли прототип JavaScript обрабатывать что-то подобное?

Редактировать : Это должно быть несколько водонепроницаемым кроссплатформенным, совместимым с браузером, поэтому я не знаю, в порядке ли изменение document.write в порядке.

Ответы [ 3 ]

1 голос
/ 25 ноября 2008

Да, вы можете переопределить 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>
1 голос
/ 25 ноября 2008

Вы пытались переопределить document.write? У меня нет времени, чтобы попробовать это прямо сейчас, но попробуйте:

var foo = document.write;
var bannerCode = '';
document.write = function(str) { bannerCode += str; };

Затем включите файл сценария, затем выполните

document.write = foo;
alert(bannerCode);
0 голосов
/ 25 ноября 2008

Почему бы не использовать jQuery? Имеет функцию готовности DOM:

$.ready(function() {

});

Тогда вы можете легко манипулировать элементом, используя

$("#div_id").html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...