Перенаправить document.write из сценария JavaScript

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

Проблема, как я понимаю, заключается в том, что мы должны включить <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 ответа

Решение

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

Если я правильно понимаю, вы хотите записать 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;

У вас все еще есть хит загрузки файла скрипта, хотя.

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

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

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

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

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