Почему JavaScript лишает меня динамически JavaScript? - PullRequest
0 голосов
/ 09 октября 2010

У меня есть javaScript, который вызывает функцию:

var combineddata = jQueryGetHtml();

Функция:

// Get ALL of the HTML using jQuery
var jQueryGetHtml = function()
{
    var htmlStartTag = function()
    {
        return $('html').contents();

        var attrs = $('html')[0].attributes;
        var result = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html';
        $.each(attrs, function() { 
            result += ' ' + this.name + '="' + this.value + '"';
        });
        result += '>';
        return result;
    }

    return htmlStartTag() + $('html').html() + '</html>';
}

Это прекрасно работает, за исключением того, что он удаляет встроенный JavaScript, такой как:

<script type="text/javascript">
var addthis_config = {"data_track_clickback":true, "ui_click":false};
</script>

Другая проблема: Это div

<div id="Pc8od0kc" class="reusable-block">
    <a href="http://www.addthis.com/bookmark.php?v=250&amp;username=somebody" class="addthis_button">
        <img width="125" height="16" style="border: 0pt none;" alt="Bookmark and Share" src="http://s7.addthis.com/static/btn/v2/lg-share-en.gif">
    </a>
    <script type="text/javascript">var addthis_config = {"data_track_clickback":true, "ui_click":false};</script>
    <script src="http://s7.addthis.com/js/250/addthis_widget.js#username=claremontmc" type="text/javascript"></script>
</div>

становится

<div id="Pc8od0kc" class="reusable-block">
    <a class="addthis_button" href="http://www.addthis.com/bookmark.php?v=250&amp;username=somebody">
        <img src="http://s7.addthis.com/static/btn/v2/lg-share-en.gif" alt="Bookmark and Share" style="border: 0pt none;" height="16" width="125">
    </a>
</div>

Ответы [ 2 ]

1 голос
/ 09 октября 2010

Получатель html() не удаляет содержимое скрипта. Если вы не получаете <script> от html(), то это потому, что в то время, когда он вызывался, в DOM не было тега <script>.

Если вы пишете в этот элемент с помощью установщика html(value), а затем позже читаете его обратно, то , что приведет к тому, что <script> s будет удалено. jQuery преднамеренно удаляет <script> теги из входных данных (среди прочих неприятных вещей, которые он делает с входящей разметкой, используя некоторый действительно ошибочный взлом регулярных выражений), и пытается запустить код внутри них вручную при вставке.

Это потому, что если вы просто напишите <script> в innerHTML, браузер не выполнит этот скрипт. Однако если вы затем выполняете манипуляции с DOM на получающихся узлах DOM, браузеры будут иногда выполнять сценарий, но в разное время, вызывая нежелательную кросс-браузерную несогласованность.

Какова ваша цель, зачем вам нужно писать, а затем извлекать <script> элементов? Писать <script> в документ с помощью html() или innerHTML.

почти никогда не стоит.
0 голосов
/ 09 октября 2010

Используйте jQuery.getScript () , чтобы получить сценарии и выполнить их на странице.Если вы не знаете, какие сценарии вы собираетесь выполнять, и вы просто захватываете HTML и выполняете эти сценарии зависимо, у вас есть огромная проблема проектирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...