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