强制重新评估内联并包含Javascript

时间:2010-07-27 23:16:56

标签: javascript jquery

我正在将Javascript注入到Greasemonkey的页面中,对正文内容进行一些处理(添加标记),然后重新插入内容。问题是原始内容中的所有事件都会丢失,这会破坏最初加载页面时添加的onClick事件。

我最初的想法是(使用jQuery)将脚本标签重新添加到头部:

$('script').each(function(s, script) {  $(script).appendTo('head');  })

或只是:

$('script').appendTo('head');

我认为这会导致脚本重新加载/重新加载,但它不起作用。

我想要执行此操作的一个简单示例:http://en.m.wikipedia.org/wiki/John_Hardy_%28song%29我需要重新应用application.js中找到的此事件

 $("h2.section_heading").click(function() {
 // Do something
 }) 

1 个答案:

答案 0 :(得分:3)

浏览器是否以及何时执行通过各种方法添加到页面的<script>标记的问题是一个棘手的问题,如果有任何更多因jQuery尝试解决的问题而变得复杂问题。你真的不想进入这个。

无论如何,正如Pointy所说,无法保证只是第二次运行页面脚本会使它们与新内容一起使用。它们可能对旧的(现在已替换的)节点有各种引用,可能根本不会再次进入。

不要对标记进行处理。 HTML字符串黑客程度非常不可靠,除了用innerHTML写回来替换所有旧对象的问题。如果您通过正则表达式黑客将HTML '<span class="highlight">'添加到HTML中,那么您只需要挖掘自己的漏洞,不兼容性和潜在的XSS漏洞。

你在浏览器中有一个非常好的DOM树。对此进行处理,在现有节点上添加元素和设置属性!它更容易,更可靠,并且对于许多操作来说更快。