防止jQuery()执行javascript

3
我正在处理一些使用jQuery解析网页html文档的代码。之所以做出这个决定是因为,jQuery凭借其出色的页面对象选择能力,使得它非常适合进行解析。
以下是代码运行方式(其中'html_string'是整个网页的html):
var page = $(html_string);

我遇到的问题是,Javascript 在 html_string 中被评估和执行。这导致新线程被形成,在某些情况下,包含无限循环,反复向服务器发出请求,最终崩溃整个客户端应用程序(而不是服务器)。
在这种情况下,有没有一种方法可以防止 Javascript 的执行。在这种情况下,Javascript 的执行是一个不需要的副作用。
非常感谢!

6
这行代码不会执行任何脚本。你的问题可能出在其他地方。 - GolezTrol
你是如何获取HTML的? - amosrivera
1
(在@GolezTrol的评论中添加; 您可以通过比较http://jsfiddle.net/UbCFc/和http://jsfiddle.net/UbCFc/1来查看此内容) - Matt
笑,那个小提琴比我的简洁多了。 - Jake Dempsey
1
GolezTrol的观点在某种程度上是正确的,如果它实际上是一个字符串,为什么还要使用jQuery选择器呢?只需将该字符串分配为字符串,var page = html_string;否则,jQuery肯定会执行选择器函数,试图找到与字符串匹配的对象作为选择器。但是,没有返回或无限循环会导致页面崩溃。 - Tumharyyaaden
1
@Tumharyyaaden 它的用途是将字符串转换为JQuery格式。它允许您解析HTML并查找单个节点,就像在正常文档中一样。 - GolezTrol
4个回答

2

这里有一个简陋的jsfiddle示例,展示了当你将html_string加载到$中时js不会运行。当你点击运行时,你会立即看到一个警报“wtf”。三秒钟后,html被加载到$中,body被更新为“moo”,你不应该看到警报。

http://jsfiddle.net/9BAkE/


它并没有回答问题,但是它确实展示了问题是错误的。 :) - GolezTrol

1
一种方法是在使用jQuery包装之前解析HTML字符串。
类似这样的代码:
var page = html_string;


//then find the script tag (untested code)
int beginning_of_script = page.indexOf('<script>');
int end_of_script = page.indexOf('</script>');

// remove the script
page = page.remove(beginning_of_script, end_of_script);

1

你可以最初将此语法作为注释加载到浏览器中

<script>
/* var page = $(html_string); */
</script>

然后稍后提取注释的内容。这里的优点是浏览器不会在页面加载时解析和执行注释。

您还可以尝试使用jQuery的.load()函数,不确定是否适合您的需求。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接