Динамически добавленный JavaScript перезаписывает представление HTML-страницы (не код)
Моя проблема заключалась в том, что я хотел добавить JavaScript на html-страницу, благодаря Энди Э, я нашел способ добавить свой JavaScript на html-страницу и выполнить. Но теперь моя проблема в том, что вся страница перезаписана JavaScript. Кто-то знает, как сделать то же самое, но без перезаписи страницы с помощью JavaScript, что-то добавить в код или что-то изменить:)?
- Я не хочу перезагружать страницу, потому что я не хочу, чтобы пользователь видел страницу дважды, если страница содержит много материала, это будет очень неудобно.
Это короткий код, который покажет вам мою проблему: (Я изменил тег объявления, потому что он не мой, поэтому я не могу разместить его в этом общедоступном месте)
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {;
var correct_div = document.getElementById('ad_468x60');
var sTag1 = document.createElement("script");
sTag1.type = "text/javascript";
sTag1.text = "<!--\ngoogle_ad_client = \"pub-1234567890123456\";\ngoogle_alternate_color = \"FFFFFF\";\ngoogle_ad_width = 468;\ngoogle_ad_height = 60;\ngoogle_ad_format = \"468x60_as\";\ngoogle_ad_channel =\"123456789\";\ngoogle_color_border = \"FFFFC6\";\ngoogle_color_bg = \"FFFFFF\";\ngoogle_color_link = \"000000\";\ngoogle_color_url = \"666666\";\ngoogle_color_text = \"333333\";\n//-->"
correct_div.appendChild(sTag1);
var sTag2 = document.createElement("script");
sTag2.type = "text/javascript";
sTag2.src = "http://google_ad_url.js";
correct_div.appendChild(sTag2)
});
</script>
</head>
<body>
<div>
"This text appears and disappears after the ad is displayed"
</div>
<div id="ad_468x60">
<!-- The JavaScript come here -->
</div>
</body>
</html>
РЕДАКТИРОВАТЬ: Могу ли я использовать iframe, чтобы сделать это?
3 ответа
Есть пара вещей, которые вы могли бы сделать.
Добавьте скрипт в пустой iframe. Это приведет к тому, что содержимое iframe будет перезаписано document.write. Вам нужно будет изменить размер iframe до соответствующих размеров.
Переопределите функцию document.write своим собственным методом. Что-то вроде этого:
// Create a closure to keep the old document.write private (function () { var oldDW = document.write; document.write = function (s) { // Document not parsed yet, allow document.write: if (document.readyState != "complete") oldDW.call(document, s); // Dangerous use, switch to innerHTML instead: else document.getElementById("ad_468x60").innerHTML = s; } })();
Как вы теперь знаете, если есть какие-либо элементы скрипта, написанные document.write(), второй метод там не обрезает их - вам нужно написать более сложную подпрограмму, чтобы разобрать элемент скрипта и использовать document.createElement() вместо
Если код использует в нем document.write, он перезапишет страницу. Вы действительно ничего не можете с этим поделать.