我做了一些实验,并且已经确定了一定程度的原因,所以在等待我感兴趣的真正答案之前,这里有一个帮助理解问题的技巧
$.get('/',function(d){
// replace the `HTML` tags with `NOTHTML` tags
// and the `BODY` tags with `NOTBODY` tags
d = d.replace(/(<\/?)html( .+?)?>/gi,'$1NOTHTML$2>',d)
d = d.replace(/(<\/?)body( .+?)?>/gi,'$1NOTBODY$2>',d)
// select the `notbody` tag and log for testing
console.log($(d).find('notbody').html())
})
编辑:进一步的实验
如果您将内容加载到 iframe 中似乎是可能的,那么您可以通过一些 dom 对象层次结构访问框架内容......
// get a page using AJAX
$.get('/',function(d){
// create a temporary `iframe`, make it hidden, and attach to the DOM
var frame = $('<iframe id="frame" src="/" style="display: none;"></iframe>').appendTo('body')
// check that the frame has loaded content
$(frame).load(function(){
// grab the HTML from the body, using the raw DOM node (frame[0])
// and more specifically, it's `contentDocument` property
var html = $('body',frame[0].contentDocument).html()
// check the HTML
console.log(html)
// remove the temporary iframe
$("#frame").remove()
})
})
编辑:更多研究
似乎 contentDocument 是获取window.document
iFrame 元素的符合标准的方式,但当然 IE 并不真正关心标准,所以这是如何以window.document.body
跨平台方式获取对 iFrame 对象的引用.. .
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
var iframeBody = iframeDoc.body;
// or for extra caution, to support even more obsolete browsers
// var iframeBody = iframeDoc.getElementsByTagName("body")[0]
请参阅:iframe 的 contentDocument