Замена document.write () на странице xhtml + xml - PullRequest
13 голосов
/ 01 сентября 2010

Я работаю в компании, которая пишет программное обеспечение, в которое клиентские сайты встраиваются с помощью

Я понимаю, почему это так, и что DOM-совместимый код должен создавать каждый элемент, устанавливать его атрибуты, при необходимости заполнять его текстовым узлом, присоединять текстовый узел к его родительскому элементу, а родительский - к какому-либо элементу страницы ....

но какой хороший обходной путь этоне требует всего этого барахла?Операторы write () содержат так много элементов, что полученный код будет отвратительным, если мы сделаем узлы и скрепим их вместе, как Knex, Legos или what-have-you.

edit: пробовал с использованием CDATA, но даже эта строка осуждается так же, как парсер xhtml на той же странице, что и наш скрипт:

<script language="text/javascript"><![CDATA[document.write('hi');]]></script>

Ответы [ 3 ]

11 голосов
/ 29 сентября 2010
var el = document.createElement('div');
el.innerHTML = 'What you used to document.write()';
document.body.appendChild(el);

Обратите внимание, что вам нужно исправить HTML, чтобы он был действительным XHTML, но это должно быть гораздо менее трудоемким, чем преобразование всего кода для использования DOM-манипуляции.

2 голосов
/ 29 сентября 2010

Возможно, вы сможете создать iframe типа text/html, записать в него содержимое, а затем импортировать узлы обратно на главную страницу.

0 голосов
/ 29 сентября 2010

Мы использовали Jquery и установили тайм-ауты для перезаписи кода, предоставленного нам подобными организациями вашей.Вот пример из Search Ignite:

<script>
<!--
// once all the page has loaded
$(document).ready(function ()
    {
        // wait a bit so everything else that runs when the page has loaded loads, then...
        setTimeout(function ()
        {
            // ...load the tracking stuff
            var headerTag = document.getElementsByTagName('head')[0];
            var seo_tag = $.createElement(document.location.protocol + "//track.searchignite.com/si/CM/Tracking/ClickTracking.aspx?siclientid=123456&jscript=1", "script");
            headerTag.appendChild(seo_tag);

        }, 20);
    });
// -->
</script>

Тайм-аут имеет дополнительное преимущество, заключающееся в том, что наша страница реагирует на пользователя до загрузки внешнего кода браузером пользователей, что очень полезно, если серверы внешнего поставщикакогда-нибудь идти внизДа, мы теряем некоторую статистику отслеживания, но пользовательский опыт не подвергается риску.

Очевидно, что вы не сможете положиться на JQuery, но вы получите общее представление.

...