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

标签 javascript jquery

我正在使用 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/

相关文章:

jquery - ajax调用完成后开始下载文件

javascript - jQuery/JS 可以检查什么改变了输入吗?

javascript - CSS 变换 :translateY from JavaScript

javascript - Material Design 组件和 Reactjs 输入字段

javascript - 尽管由于邻居 div 而使用 "user-select: none",Chrome 仍会复制整个 html

jquery - Thymeleaf 与数据表

JavaScript - 将输入框中的值添加到数组

javascript - 如何使自定义页脚点亮元素保留在页面底部

javascript - 向包含 slider 的 div 添加 div 标题(跟进上一个问题)

javascript - 即使双击时也仅调用事件处理程序一次