我正在使用 Greasemonkey 将 Javascript 注入(inject)到页面中,对正文内容进行一些处理(添加标记),然后重新插入内容。问题是原始内容中的所有事件都会丢失,从而破坏了页面最初加载时添加的 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 中找到的 this 事件
$("h2.section_heading").click(function() {
// Do something
})
最佳答案
浏览器是否执行以及何时执行的问题<script>
通过各种方法添加到页面的标签是一个棘手的问题,如果 jQuery 试图解决这个问题,就会变得更加复杂。你真的不想卷入其中。
无论如何,正如 Pointy 所说,无法保证仅第二次运行页面脚本就能使它们处理新内容。它们可能有对旧(现已替换)节点的各种引用,并且可能根本不希望再次输入。
不要对标记进行处理。 HTML 字符串黑客行为非常不可靠,除了当您用 innerHTML
写回它时替换所有旧对象的问题之外。 。例如,如果您添加 '<span class="highlight">'
通过正则表达式黑客攻击 HTML,您刚刚给自己挖了一大堆错误、不兼容性和潜在的 XSS 漏洞。
浏览器中已经有一个完美的 DOM 树。对其进行处理,在现有节点上添加元素并设置属性!它更容易、更可靠,并且对于许多操作来说速度更快。
关于javascript - 强制重新评估内联并包含 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3348739/