Перенаправить document.write из сценария JavaScript - PullRequest
2 голосов
/ 29 апреля 2009

Мы хотим показывать рекламу на нашем сайте, но у рекламодателя, с которым мы ведем переговоры, есть проблемы с доставкой их рекламы достаточно быстро для нас.

Проблема, как я вижу, заключается в том, что мы должны включить <script src="http://advertiserurl/myadvertkey"></script>, где мы хотим показывать объявление, и затем он загрузит скрипт и использует document.write для вставки некоторого html.

Проблема в том, что звонок на сайт рекламодателя идет медленно, а возвращаемый код загружает другой файл (объявление), что означает, что скорость показа наших страниц замедляется, пока мы ожидаем, пока запрос будет выполнен.

Есть ли способ взять выходные данные из вызова document.write и записать их после загрузки страницы?

В основном я хочу сделать это:

<html>
<body>

    <script>
function onLoad() {
    var urlToGetContentFrom = 'http://advertiserurl/myadvertkey';

    //  download js from above url somehow

    var advertHtml = // do something awesome to interprete document.write output
    $('someElement').innerHTML = advertHtml;
}
    </script>

</body>
</html>

Или что-нибудь подобное, что позволит мне получить вывод этого файла и отобразить его.

Ответы [ 4 ]

6 голосов
/ 29 апреля 2009

Если я правильно понимаю, вы хотите записать document.write в переменную, а не записывать ее в документ. Вы действительно можете сделать это:

var advertHtml = '';
var oldWrite = document.write;

document.write = function(str)
{
    advertHtml += str;
}

// Ad code here

// Put back the old function
document.write = oldWrite;

// Later...
...innerHTML = advertHtml;

У вас все еще есть возможность загрузки файла скрипта.

3 голосов
/ 29 апреля 2009

Чтобы отделить загрузку главной страницы от загрузки рекламы, вы можете поместить объявление на его собственной странице в iframe или, аналогичным образом, загрузить файл сценария с помощью AJAX и запускать его всякий раз, когда оно выходит из строя. Если первое не подходит из-за ссылки на URI или чего-либо другого, второе дает вам некоторую гибкость: вы можете использовать замену строки, чтобы переписать «document.write» на что-то другое, или, возможно, временно заменить ее, например, «document.write = custom_function»; ».

1 голос
/ 23 ноября 2009

Вы можете быть заинтересованы в библиотеке Javascript, которую я разработал , которая позволяет загружать сторонние скрипты, используя document.write после window.onload. Внутри библиотека переопределяет document.write, динамически добавляя элементы DOM, выполняя любые включенные сценарии, которые также могут использовать document.write.

Я настроил демонстрацию, в которой я загружаю 3 объявления Google, виджет Amazon и Google Analytics динамически .

0 голосов
/ 29 апреля 2009

Вы столкнулись с некоторыми проблемами безопасности при переходе между доменами из-за одной и той же политики происхождения. Я бы посмотрел в JSONP, если у вас есть доступ для изменения рекламного контента / услуги

http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback

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