Google Closure Ajax内容

时间:2011-06-30 07:57:28

标签: javascript ajax google-closure google-closure-library

如何在XHR中显示DIV responseText的HTML内容,并删除其<script>代码并将其附加到head代码? (使用Google Closure)

类似于Prototype JS中的extractScripts

1 个答案:

答案 0 :(得分:0)

如果responseText是一个包含HTML和脚本标签的整个网页,那么也许您应该将它附加到iFrame和iFrame src并让浏览器为您管理所有内容而不是将它放在您拥有的DIV中管理网页的不同部分。

如果您真的想获得responseText并将其直接放入您自己文档中的div中,那么您有几个选项。

首先,如果响应只是一个带有嵌入式脚本标记的HTML片段(不是整个网页),那么您只需将整个响应读入JS变量,然后将其分配给DIV的.innerHTML属性。浏览器将解析HTML,包括嵌入的标签,并将其评估为最初是该div的一部分(除非脚本执行时间显然不是在您分配.innerHTML之后。

举个例子:

var myDiv = document.getElementById("myDiv");
myDiv.innerHTML = responseText;

其次,如果你有什么理由想要单独提取标签(我想不出这个原因与第一个选项相比),那么你将不得不解析开始和结束脚本标签。 responseText自己,将JS代码文本放在它们之间的JS变量中,并在该变量上使用eval来执行它并使其成为文档的一部分。然后,将剩余的HTML分配给div的innerHTML属性,如上例所示。

如果该脚本中包含document.write,那么第二种方法就不会起作用,因为document.write没有位置上下文。如果这些脚本标记依赖于任何页面加载方法,如onload,那么脚本也不会看到这些事件(除非它是iFrame的src。