innerHTML不评估javascript吗?
我正在尝试一种将代码分解成单个文件的技术(这样一个可能有一堆不同部分的页面现在变成了多个文件,而不是一个庞大的HTML页面)并使用ajax加载它们,然后将内容设置为innerHTML到某个父div。这使得代码非常干净,在所有现代浏览器中都能很好地工作,但我注意到,当外部页面包含innerHTML不评估javascript吗?,javascript,ajax,Javascript,Ajax,我正在尝试一种将代码分解成单个文件的技术(这样一个可能有一堆不同部分的页面现在变成了多个文件,而不是一个庞大的HTML页面)并使用ajax加载它们,然后将内容设置为innerHTML到某个父div。这使得代码非常干净,在所有现代浏览器中都能很好地工作,但我注意到,当外部页面包含标记时,该标记中的javascript被忽略(未解析并加载到父页面的javascript上下文中),因此这些外部代码片段中存在的方法和变量根本就不存在 我在阅读脚本标记的内容,然后eval()整个过程中都做了一些工作,这是
标记时,该标记中的javascript被忽略(未解析并加载到父页面的javascript上下文中),因此这些外部代码片段中存在的方法和变量根本就不存在
我在阅读脚本标记的内容,然后eval()
整个过程中都做了一些工作,这是可行的……然而,我很好奇,我是否忽略了将脚本包含在这些外部文件中的一些更原生的机制,或者这种方法是否真的是实现我目标的唯一方法
TIA这不是
innerHTML
的工作。您可能应该将外部文件作为DOM对象加载(这是XMLHTTPRequest
名称的来源),以便在添加之前将脚本
标记转换为适当的对象
使用jQuery对Firefox进行的快速实验(在本页上,heh)表明,innerHTML
将添加一个无法执行的脚本元素,而这确实会执行:
$( 'body' ).append( $('<script>console.log( "hello, world!" );</script>' ) );
$('body').append($('console.log(“hello,world!”););
是脚本
标记不在DOM中,还是其中的代码没有执行?@JanDvorak“在正文中添加了2个字符。eval()
?这似乎有点迂腐。@WaleedKhan,~~标记存在于我的外部代码片段中。因此,通过AJAX读取的代码是有效的HTML(包括有效的javascript)。整个过程在ajax请求中检索,然后通过innerHTML加载到一个封装DIV中。但是,在innerHTML中设置javascript时(或者永远都不会)不会对javascript进行评估。因此,正如我所说,我正在手动解析传入文本中的该块并对其进行评估(),但这对我来说似乎很难看。@JanDvorak,当然是:)有趣的。。。所以我非常熟悉XMLHTTPRequest,但在本例中,我使用了jQuery.get()
来实现相同的结果。为此,我应该切换回纯javascript还是有一个jQuery模拟程序可以利用?@Dr.Dredel只需指定'XML'
作为tojQuery.get()
.ah。。我想我们在同一时间打字。你是说我应该使用append而不是innerHTML?@Dr.Dredel使用你想要的任何东西…innerHTML
是DOM,不是jQuery API,所以我假设你没有使用jQ。要获得相同的语义,可以使用$.replaceAll
。