当一个页面中的iframe内容来自另外一个网站的时候,通过IHTMLFramesCollection2。item获得IHTMLWindow2指针,然后调用IHTMLWindow2::get_document获得的总是空指针。同样的情况出现在遨游浏览器的viewPage插件里。在这种情况下,viewpage得不到ifram中的链接。
同过得到ifram内容的url,再navigate(url)似乎可以,但是有没有不用再次连接的方法呢?

解决方案 »

  1.   

    IHTMLDocument2 * pDoc = ...;
    IHTMLWindow2 *pHTMLWnd = NULL;
    IHTMLDocument2 * pFrameDoc=NULL;
    IHTMLFramesCollection2 *pFramesCollection=NULL;
    LPDISPATCH lpDispatch;long p;
    VARIANT varindex,varresult;
    varresult.vt=VT_DISPATCH;
    varindex.vt = VT_I4;
    if(pDoc!=NULL)
    {
    HRESULT hr=pDoc->get_frames(&pFramesCollection);
    if(SUCCEEDED(hr)&&pFramesCollection!=NULL)
    {
    hr=pFramesCollection->get_length(&p);
    if(SUCCEEDED(hr))
    for(int i=0; i<p; i++)
    {
    varindex.lVal = i;
    if(pFramesCollection->item(&varindex, &varresult) ==S_OK)
    {
    lpDispatch=(LPDISPATCH)varresult.ppdispVal;
    if (SUCCEEDED(lpDispatch->QueryInterface(IID_IHTMLWindow2, (LPVOID *)&pHTMLWnd)))
    {
    if(SUCCEEDED(pHTMLWnd->get_document( &pFrameDoc)))
    {
    //work with the pFrameDoc...
    }
    pHTMLWnd->Release();
    pHTMLWnd=NULL;
    }
    }
    }
    pFramesCollection->Release();
    }
    pDoc->Release();
    }
      

  2.   

    <body onload=readiframe()>
    <iframe src="1.htm" name=iframe1>
    </iframe>
    </body>
    <script language=javascript>
    function readiframe()
    {
    alert(iframe1.document.body.innerHTML);
    }
    </script>
    1.htm
    <html>
    <body>
    &nbsp;
    </body>
    </html>
      

  3.   

    基于IE的安全性设定,跨框架的DHTML访问可能被拒绝。参见Internet Explorer的安全设置。
      

  4.   

    不行啊,楼上说的几个方法对<iframe src="http://www.sohu.com" name=iframe1>
    这样的iframe src是另外网站的都得不到内容。 internet explorer的安全设置默认是可以跨域浏览的,而且IE也显示了,但就是通过程序得不到iframe里的内容。
      

  5.   

    搞清楚了,Mission:Impossible, IE不许那么作,更改安全设置也不行.
      

  6.   

    我试过了,可以啊,xp sp2 chs,ie6,没有设置什么东西