为什么javascript会删除我的动态javascript?

时间:2010-10-09 00:20:15

标签: javascript html dom stripping

我有一个调用函数的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 个答案:

答案 0 :(得分:1)

html() getter不会删除脚本内容。如果你没有从<script>获得html(),那就是因为在调用DOM时没有<script>标记。

如果您使用html(value) setter写入该元素,然后稍后将其读回,那么 将导致<script>被剥离。 jQuery故意从输入中删除<script>标记(使用一些非常误导的正则表达式黑客攻击对其进行标记的其他令人讨厌的事情),并尝试在插入时手动运行代码。

这是因为如果您只是将<script>写入innerHTML,浏览器将不会执行该脚本。但是,如果您对生成的DOM节点执行DOM操作,浏览器有时执行脚本,但在不同时间会导致不希望的跨浏览器不一致。

您的目标是什么,为什么需要编写然后检索<script>元素?通过<script>html()innerHTML写入文档几乎绝不是一个好主意。

答案 1 :(得分:0)

使用jQuery.getScript()获取脚本并在页面上执行它们。如果您不知道将要执行哪些脚本,并且您只是依赖于HTML并执行这些脚本,那么您就会遇到巨大的设计问题。