我有一个包含HTML标签的字符串:
var str = '<div><p>Examplee</p></div><script>alert("testing!")</script>';
然后,我将它附加到HTML中:
document.body.innerHTML += str;
当内容被追加但脚本不执行时,有没有办法强制执行它?
我有一个包含HTML标签的字符串:
var str = '<div><p>Examplee</p></div><script>alert("testing!")</script>';
document.body.innerHTML += str;
当内容被追加但脚本不执行时,有没有办法强制执行它?
document.body.innerHTML += str;
var scripts = document.querySelectorAll("script");
var text = scripts[scripts.length - 1].textContent;
textContent
和innerText
哪个可用。id
、class
等),这样您就不必像那样通过位置来查找它了。extractScripts
)。
Use indirect eval
(aka "global eval
") on it: (0, eval)(text)
. This is not the same as eval(text)
; it runs the code in global scope, not local scope.
Create a new script element, set its text to the text, and add it
var newScript = document.createElement("script");
newScript.textContent = text;
document.body.appendChild(newScript);
If doing that, might make sense to remove the original, though it doesn't really matter.
示例,添加script
元素并获取文本后使用间接eval
:
var str = '<div><p>Examplee</p></div><script>alert("testing!")<\/script>';
document.body.innerHTML += str;
var scripts = document.querySelectorAll("script");
(0, eval)(scripts[scripts.length - 1].textContent);
+=
在document.body.innerHTML
上,因为它会构建整个页面的HTML字符串,然后追加到它上面,最后将整个页面拆除,然后解析新的HTML以构建一个新的页面。我认为这只是您问题中的一个示例。alert("testing!")
脚本放在一个单独的文件中,例如同一目录下的alert.js
文件。var str = '<div><p>Examplee</p></div>';
var url = 'alert.js';
document.body.innerHTML += str;
$.getScript(url);
我知道这可能会增加一些工作量,但最好的做法是将JavaScript代码保持独立,不要放在HTML文件中。你也可以使用回调函数来收集用户数据,以便在警告后通知其他进程用户已经被警告。
$.getScript(url, function(){
//do something after the alert is executed.
});
var str = '<div><p>Examplee</p></div>';
var url = 'alert.js';
$.getScript(url, function(){
document.body.innerHTML += str;
});
编辑:我知道jQuery没有被标记,但我也不是在请求成为这个问题的被接受的答案。我只是提供了另一种选择,对于那些可能遇到相同问题并且使用jQuery的人来说,如果是这种情况,$.getScript是一个非常有用的工具,专门为解决这个问题而设计的。在页面加载后,您应该更改HTML。尝试这样做:
document.addEventListener("DOMContentLoaded", function(event) {
document.body.innerHTML += str;
});