Изменение баннера JavaScript

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 959
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы пробовали переопределить 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

Да, но я должен заставить объект 'html' не document.write, а отображать содержимое в html.

Seb Nilsson 25.11.2008 13:51
Ответ принят как подходящий

Да, вы можете переопределить 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>

Другие вопросы по теме