2

我有以下页面编码:

我的页面.html:

    <html><script>var a=document.createElement('p');
    a.innerHTML="hello world";
    document.body.appendChild(a);​​​​​​​​​​​&lt;/script>
    ​​​​​​​​​​​​​​​​​​​​​​&lt;body>
    <p>testing 1 2 3....</p></body>
   </html>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

当我使用具有以下代码的 find.html 提取信息时。

<script>
window.onload =finder();
function finder(){
var iframe=document.createElement('iframe');
iframe.width=1;
iframe.height=1;
iframe.src='mypage.html';
iframe.setAttribute('id', 'iframer');
document.body.appendChild(iframe);
    setTimeout(
        function() { 
var e = document.getElementById("iframer");
var frameHTML = e.contentDocument; var serializer = new XMLSerializer(); var content = serializer.serializeToString(frameHTML); alert(content);
        } , 30000);
}
</script>

最终结果显示为警报弹出窗口:

    <html><script>var a=document.createElement('p');
    a.innerHTML="hello world";
    document.body.appendChild(a);​​​​​​​​​​​&lt;/script>
    ​​​​​​​​​​​​​​​​​​​​​​&lt;body>
    <p>testing 1 2 3....</p></body>
   </html>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

那不是我要找的。我正在寻找已在浏览器中呈现的以下内容,我需要获取所有呈现和生成的动态源代码仅用于检查,我如何编写代码以获取呈现的 HTML 源代码:

   <body>
   <p>hello world</p>
   <p>testing 1 2 3....</p>
   </body> 
4

2 回答 2

1

给 IFrame 一个id属性。

contentDocument对象实际上因不同的浏览器而异。此外,出于安全原因,您只能获取同一域上的 IFrame 的内容。

var IFrame_DOM;
var iframe = document.getElementById('iframer'); // The ID of the IFrame
if (iframe.contentDocument)
{
  IFrame_DOM = iframe.contentDocument; // Get DOM in Chrome / Gecko
}
else if (iframe.contentWindow)
{
  IFrame_DOM = iframe.contentWindow.document; // Internet Explorer
}
if (IFrame_DOM)
{
  // Successfully got the DOM
  // Use the DOM in code here
}
else
{
  alert('Unsupported Browser. Couldn\'t read DOM.');
}
于 2012-07-24T03:56:50.150 回答
0

为什么你不使用这样的 xml 序列化程序:

var serializer = new XMLSerializer();
var content = serializer.serializeToString('yourIframeObject;);

content 变量包含 iframe 内容,包括 <!DOCTYPE html>, <HTML><head>

于 2014-01-29T11:26:28.957 回答