我正在将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
})
答案 0 :(得分:3)
浏览器是否以及何时执行通过各种方法添加到页面的<script>
标记的问题是一个棘手的问题,如果有任何更多因jQuery尝试解决的问题而变得复杂问题。你真的不想进入这个。
无论如何,正如Pointy所说,无法保证只是第二次运行页面脚本会使它们与新内容一起使用。它们可能对旧的(现在已替换的)节点有各种引用,可能根本不会再次进入。
不要对标记进行处理。 HTML字符串黑客程度非常不可靠,除了用innerHTML
写回来替换所有旧对象的问题。如果您通过正则表达式黑客将HTML '<span class="highlight">'
添加到HTML中,那么您只需要挖掘自己的漏洞,不兼容性和潜在的XSS漏洞。
你在浏览器中有一个非常好的DOM树。对此进行处理,在现有节点上添加元素和设置属性!它更容易,更可靠,并且对于许多操作来说更快。