我正在研究一些使用jQuery从Web上解析html文档中的数据的代码。之所以做出这个决定是因为jQuery具有在页面上选择对象的强大功能,因此非常适合解析。
代码就像这样(其中'html_string'是整个网页的html):
var page = $(html_string);
我遇到的问题是javascript也在html_string中进行评估和执行。这导致形成新线程,在某些情况下,包含无限循环,这些循环会向服务器发出重复请求,并最终导致应用程序的整个客户端(而不是服务器)崩溃。
有没有办法以某种方式阻止在这种情况下执行javascript。在这种情况下,执行javascript是一种不必要的副作用。
非常感谢!
答案 0 :(得分:2)
这是一个糟糕的小jsfiddle,它显示当你将html_string加载到$时js不会运行。单击“运行”后,您将看到“wtf”的即时警报。三秒钟后,html被加载到$并且正文更新为'moo',你不应该看到警报。
答案 1 :(得分: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);
答案 2 :(得分:1)
您最初可以将此语法作为注释
加载到浏览器中<script>
/* var page = $(html_string); */
</script>
然后提取评论的内容。这里的优点是浏览器不会解析并在页面加载时执行注释。
您还可以使用jQuery的.load()函数进行探索,不确定它是否符合您的需求。
答案 3 :(得分:1)
如果你不在乎有一个额外的元素,请检查一下! http://jsfiddle.net/UbCFc/4/