插入并执行javascript
我有一个javascript变量:插入并执行javascript,javascript,html,Javascript,Html,我有一个javascript变量: var foo='<script type="text/javascript">alert("Hello World");<\/script>' var foo='alert(“Hello World”);' 变量与元素一起插入。innerHTML=foo;页面上发生事件后,页面加载后约10秒 有没有一种方法可以在插入后立即执行“警报”功能?如果您必须绝对、肯定地获取字符串中的JavaScript代码并执行它,那么基本上必须使用
var foo='<script type="text/javascript">alert("Hello World");<\/script>'
var foo='alert(“Hello World”);'
变量与元素一起插入。innerHTML=foo;页面上发生事件后,页面加载后约10秒
有没有一种方法可以在插入后立即执行“警报”功能?如果您必须绝对、肯定地获取字符串中的JavaScript代码并执行它,那么基本上必须使用
eval
或类似eval
的机制。在一些年的JavaScript编程中,我从未使用过它,我建议您看看是否有其他方法可以实现实际的总体目标
因此,在这里,您可以去掉脚本标记内容,只需eval
代码,例如:
var script = foo.replace(/^<script[^>]*>/, "").replace(/<\/script>$/, "");
eval(script);
// Or window.evalInGlobalScope(script); // -- See below
您不需要做很多更改,只需要一个小更改 现在您有这样一行代码:
oDiv.innerHTML = foo;
只需将其改为这三行:
var oScript = document.createElement("script");
oScript.innerHTML = foo;
oDiv.appendChild(oScript);
并且havefoo
只包含原始JS,不包含
和
标记
.是的,但是它很麻烦,因为您必须
eval()
脚本部分。jQuery有一些现成的函数来实现这一点——使用它是一种选项吗?插入标记的方式不是代码被设置,而是没有被调用,根本没有被计算。(如果是的话,警报将立即发生。)如果你给我们更多的上下文,几乎可以肯定有更好的方法来做你想做的事情。佩卡:如果你的问题是“我能使用jQuery吗”,那么是的,但如果可以用其他方式做,那会更好。我恐怕这是我唯一能做的方法(通过插入变量),因为“foo”通常是一个对象。@Anonymouse:innerHTML
正在创建中,并且跨浏览器工作比其他许多东西都好——只是不适用于此(脚本注入)。如果您试图用它创建无效的DOM结构,可靠性会显著下降(例如,将div
的innerHTML
设置为“Hi there”),但除了脚本、无效结构和旧浏览器中表单字段的一些有趣之处之外,它非常可靠。在script
元素上设置innerHTML
不能跨浏览器可靠地工作。例如,它在IE的所有版本中都失败。因此,使用各种机制来查找正确的evalInGlobalScope
我的答案中的函数。@T.J它适用于最新版本的Chrome、Firefox和IE。IE9处于兼容模式(因此据我所知IE8)确实失败了-知道其他浏览器吗?@Shadow
:IE9、IE8、IE7、IE6(已经死了!)所有这些都失败了,但这没关系,因为它们提供了execScript
。Firefox和其他一些浏览器提供了window.eval
(与eval
)不同)。在几乎所有其他方面,创建一个文本节点(而不是设置innerHTML
)有效。同样,请参考我答案中的evalInGlobalScope
。它测试了浏览器支持的机制(一次)。几年前我对此做了大量研究。好吧,我只是希望有更简单的东西,但我想你和往常一样是对的。:)
var oScript = document.createElement("script");
oScript.innerHTML = foo;
oDiv.appendChild(oScript);