2011-05-28 137 views
1

我:停止执行JavaScript

$('body').data('data1', '<script type="text/javascript">console.debug('execute');</script><div>example</div>'); 

和:

<div id="content"></div> 

当我这样做:

$(document).ready(function() { 
    $('#content').html($('body').data('data1')); 
}); 

然后JavaScript的执行。如何防止执行?可能吗?

+6

其实,你会得到一个语法错误。即使你解决了这个问题,你期望会发生什么?如果你不想让脚本运行,那你为什么要将它插入到DOM中? – 2011-05-28 02:01:43

+0

对不起,语法错误。我是从记忆中写下来的。这个例子是一个大问题的例子。只是我还必须存储JS代码。 – 2011-05-28 02:10:54

回答

1

您必须从HTML字符串中去除script标签。

这适用于Firefox/Chrome,尽管我不了解其他浏览器。请注意,这只适用于格式良好的(x)html。

编辑:如果你也想的JS,你可以修改前面的代码这样:

var scripts = []; 
$('script', doc).remove().each(function() { 
    scripts.push($(this).html()); 
}); 

提醒你,你甚至不必删除script标签。现在,响应是在其单独的DOM文档中,它不会搞乱您自己的脚本,并且您可以使用简单的$('selector', doc) jQuery来访问您需要的任何内容。

0

要停止脚本执行的唯一方法是将其从数据中删除。原型框架使用如下正则表达式来执行此操作:

<script[^>]*>([\\S\\s]*?)<\/script> 
+0

嗯,不要用正则表达式解析HTML?请? – 2011-05-28 02:16:10

+0

我知道这是令人讨厌的。然而它工作得很好。它直接从原型源代码中复制。这样做意味着可以使用格式错误的XHTML,并且也可以在所有浏览器中使用。 – Daniel 2011-05-28 02:45:38

+0

好主意。我已经删除了这些标签,但以另一种方式。 – 2011-05-28 03:13:07

0

考虑一种中和JavaScript包含的替代方法。下面是一个简单的函数编写一个HTML被添加到该文件:

function preventJS(html) { 
    return html.replace(/<script(?=(\s|>))/i, '<script type="text/xml" '); 
} 

如何使用:

$("#content").append(preventJS("<span>Hello 1<script type='text/javascript'>alert('Hello 1!');<\/script></span>")); 

它在这里详细描述 - JavaScript: How to prevent execution of JavaScript within a html being added to the DOM。我在Chrome,IE和FireFox中测试过。我希望它也能为你工作。