私は少し実験し、原因をある程度特定したので、私が興味を持っている本当の答えを待っているので、ここに問題を理解するのに役立つハックがあります
$.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