最近被一个WebBrowser跨域的问题难住了。
是这样的:我的程序要录制用户在WebBrowser页面上的操作,要求录制到发生事件的元素的id或name和它所在的frame的id或name,frame可以有多层。
我现在发现当Frame存在跨域情况的时候,无法从内层Frame获取到外层Frame的DOM对象。
我看到蒋昇回复的一篇帖子提到当从外层Frame取内层Frame的对象的时候,可以QueryService它的IWebBrowser2接口来实现跨域访问,但是我现在用这个方法也不能从内层取外层的对象。
我想问的是这种从内层Frame跨域获取外层Frame的DOM对象的操作是不是无法实现,还是我取对象的方法不对呢?有没有什么别的方法可以实现我的需求呢?

解决方案 »

  1.   

    我当年使用的是自己编写一个XMLHTTP组件(模仿Mircrosoft XMLHttp)来实现跨域的问题
      

  2.   

    LS高人的意思是不是在加载页面的时候直接录制DOM树结构,然后自己去遍历超找元素?
    能不能详细讲解一下。另外,分数不够的话可以想别的办法给(不过像LS这个级数估计也不看重分数了)。
      

  3.   

    再把需求说详细一些吧:
    比如,现在有一个本地的页面,里面有两个Frame,ID分别F1和F2,这两个Frame的SRC都指向www.google.cn,这样这个页面打开后会有两个Google的页面在上面。
    我现在随机的点击其中一个页面的输入框,WebBrowser会监控到一个HTMLELEMENTEVENTS2_ONCLICK事件。这个事件还带有一个指向这个输入框的DOM对象的指针,通过这个对象可以获取该输入框的ID和Name。
    我的需求是,要知道这个输入框是在哪个Frame中。我之前的解决办法是通过查询输入框所在的IHTMLWindow4接口,然后调用get_frameElement方法获取该Window所在的Frame。但是我发现当Frame存在跨域的时候,比如上面描述的这个页面,get_frameElement方法会返回E_ACCESSDENIED,拒绝访问。求教高人有什么办法可以解决这个问题,我只要能获取发生事件的对象所在的Frame,可以是各种方法。
      

  4.   

    http://msdn.microsoft.com/en-us/library/ms537182(VS.85).aspx
      

  5.   

    从顶层文档中开始枚举所有frame元素,对每个frame元素,查询它的IHTMLDocument2接口,再跟你的焦点元素所在doc进行指针对比,如果相同就表示这个frame元素就是你想要的元素