innerHTML不评估javascript吗?

时间:2012-12-30 08:00:32

标签: javascript ajax

我正在尝试一种技术,我将我的代码分解为单个文件(这样一个页面可能有很多不同的部分现在是多个文件而不是一个庞大的HTML页面)并使用ajax来加载它们然后将内容设置为innerHTML到某个父div。这使得代码非常干净并且在看似所有现代浏览器中都能很好地工作,但我只是注意到当外部页面包含<script>标记时,该标记中的javascript被忽略(未被解析并加载到父标记中)页面的javascript上下文)所以这些外部片段中存在的方法和变量就完全没有了。

我已经完成了一个工作,我在那里阅读了脚本标签的内容,然后eval()整个事情,这是有效的...但是,我很好奇我是否忽略了一些更本机的机制包括这些外部文件中的脚本,或者如果这种方法确实是唯一能实现我的目标的方法。

TIA

1 个答案:

答案 0 :(得分:2)

这不是innerHTML的工作。您应该将外部文件作为DOM对象(这是XMLHTTPRequest名称的来源)加载,以便在添加之前将script标记转换为正确的对象。

使用jQuery进行Firefox的快速实验(在此页面上,heh)显示innerHTML将添加一个未执行的脚本元素,而这会执行:

$( 'body' ).append( $('<script>console.log( "hello, world!" );</script>' ) );