none
关于WebBrowser访问跨域Frame的问题 RRS feed

  • 问题

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

答案

全部回复

  • 再把需求说详细一些吧:
    比如,现在有一个本地的页面,里面有两个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,可以是各种方法。
    2010年2月1日 9:28
  • http://msdn.microsoft.com/en-us/library/ms537182(VS.85).aspx

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2010年2月6日 20:58
    版主