Динамически добавленный 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, он перезапишет страницу. Вы действительно ничего не можете с этим поделать.

Вы должны использовать getScript функционировать здесь.

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