2013-07-19 36 views
0

例如:你可以运行写入DOM(内部HTML)的JavaScript吗?

document.getElementById("test").innerHTML= "<script>document.write('worked')</script>"; 

结果是:

<div id="test"><script>document.write('worked')</script></div> 

即没有JS运行。为什么我不只是让.innerhtml“工作”开始呢?这是技术能力的问题。是否有可能在给定场景下在DOM中运行JavaScript?

谢谢

+0

你为什么需要这个? – Guanxi

+0

@关西知道有没有可能 – user1166981

+0

我怀疑它会起作用;你试过了吗? (你需要在所有的浏览器中测试一下)。但为什么你要这样做呢?它会给你带来什么?代码中的脚本元素只存在以便代码可以运行......如果您仍然在JS上下文中,则可以运行代码,那么将它放入脚本标记中会有什么优势? – Spudley

回答

3

这是不够的,只是设置innerHTML来的东西,包含一个脚本标签。您必须创建一个脚本元素并将其附加到DOM。我相信其目的是在注入大量内容时提供一些跨站点脚本保护。

​​

例如:想您所想,虽然http://jsfiddle.net/axvaT/

document.write将无法​​正常工作。 document.write不会将文本放置在脚本标签所在的位置。相反,它会将文本放在HTML解析器当前正在查看的位置。根据JS代码运行的时间不同,这些可能是相同的,也可能完全不同。

因此,除此之外,从不使用document.write作任何事情。 永远。即使调试。


最后,虽然有时它是有用的注入一个脚本标记指向其他一些js文件:

var script = document.createElement('script'); 
script.src = 'somefile.js'; 
document.head.appendChild(script); 

与具有JS中是没有意义的脚本标记这样做。您正在使用JavaScript来创建脚本标签,该标签应立即运行一些JavaScript。为什么不只是运行那个你想逃跑的JavaScript而不是创建一个新的脚本标签来为你做呢?

所以千万不要这样做:

​​

,而不是仅仅做:

alert('ran some JS'); 
+0

这不是必须已经在JS脚本标签内才能工作吗?我正在谈论编写内部代码。HTML,那么代码运行,而不是被忽略,就像它在我的例子 – user1166981

+0

如果你真的想通过大型innerHTML注入来做到这一点,你必须找到脚本标签并手动评估它们。 http://stackoverflow.com/questions/1197575/can-scripts-be-inserted-with-innerhtml但真的,想想你想做什么。我很确定有一个更好的方法可以使整个问题变得不必要。 –

相关问题