Javascript 将脚本附加到HTML后运行脚本
我有一个HTML字符串:Javascript 将脚本附加到HTML后运行脚本,javascript,html,Javascript,Html,我有一个HTML字符串: var str = '<div><p>Examplee</p></div><script>alert("testing!")</script>'; 内容被追加,但脚本不执行,有没有办法强制执行?首先,需要注意的是:自然地,只能使用您信任的脚本执行此操作。:-) 有两种方法。基本上,您需要: 获取脚本的文本,然后 运行它 获取文本 一种选择是继续添加它,然后找到它并抓取它的文本: document.
var str = '<div><p>Examplee</p></div><script>alert("testing!")</script>';
内容被追加,但脚本不执行,有没有办法强制执行?首先,需要注意的是:自然地,只能使用您信任的脚本执行此操作。:-) 有两种方法。基本上,您需要:
document.body.innerHTML += str;
var scripts = document.querySelectorAll("script");
var text = scripts[scripts.length - 1].textContent;
在过时的浏览器上,您可能需要检测textContent
vs.innerText
您可能想给它一个识别特征(id
,class
,等等),这样您就不必像那样按位置查找它
或者,您可以执行PrototypeJS库所做的操作,并尝试使用正则表达式从字符串中获取它。您可以找到他们的源代码(查找extractScripts
)
运行它
获得脚本文本后,您有几个选项:
- 在其上使用间接的
(也称为“全局eval
”):eval
。这与(0,eval)(文本)
不同;它在全局范围而不是本地范围内运行代码eval(text)
- 创建一个新的脚本元素,将其文本设置为文本,然后添加它
如果这样做的话,删除原作可能是有意义的,尽管这并不重要var newScript = document.createElement("script"); newScript.textContent = text; document.body.appendChild(newScript);
脚本
元素的文本并使用间接eval
的示例:
var str='examplealert(“testing!”);
document.body.innerHTML+=str;
var scripts=document.querySelectorAll(“脚本”);
(0,eval)(脚本[scripts.length-1].textContent)代码>您应该在加载HTML后更改它。
试试这个:
document.addEventListener("DOMContentLoaded", function(event) {
document.body.innerHTML += str;
});
jQuery提供了$.getScript(url[,success])函数。然后可以从一个单独的jquery文件加载和执行代码,该文件有助于管理和控制执行流
基本上,将您的alert(“testing!”)
脚本放在一个单独的文件中,例如alert.js
在同一目录中
然后,您可以在将员工添加到HTML时运行脚本
var str = '<div><p>Examplee</p></div>';
var url = 'alert.js';
document.body.innerHTML += str;
$.getScript(url);
例如,在执行警报后添加员工可能是更好的设计
var str = '<div><p>Examplee</p></div>';
var url = 'alert.js';
$.getScript(url, function(){
document.body.innerHTML += str;
});
var str='example;
var url='alert.js';
$.getScript(url,函数(){
document.body.innerHTML+=str;
});
编辑:我知道jQuery没有标记,但我也不想成为这个问题的公认答案。我只是为可能遇到相同问题并可能正在使用jQuery的人提供了另一种选择。如果是这样的话,$.getScript是针对这个问题设计的非常有用的工具。因为附加时它不会运行,脚本在页面加载或操作事件上运行,所以需要向它添加触发器,我如何添加触发器?我尝试将警报包装在函数中,并在附加警报后调用它,但它也不起作用this@clearshot66:OP似乎没有使用jQuery,他们也没有标记.@t.J.Crowder OP也从未说过他们不能,因此我没有将其作为答案。
$.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;
});