代码之家  ›  专栏  ›  技术社区  ›  JimEvans

如何确定何时通过鼠标单击并等待事件生成BeforeNavigate2?

  •  1
  • JimEvans  · 技术社区  · 14 年前

    正如我在其他问题中所说的,我正在为一个开源的浏览器自动化框架做贡献( Selenium WebDriver here .

    为了确定导航是否已启动,驱动程序代码附加到DWebBrowserEvents2::BeforeNavigate2事件。但是,在click消息被发送到IE窗口之后,SendMessage返回(表示IE消息循环已经处理了消息)和BeforeNavigate2激发之间会有一些延迟。我想我可以使用attachEvent将回调函数附加到HTML元素的onclick事件并等待处理,但我不确定这是否与BeforeNavigate2事件同步。

    2 回复  |  直到 14 年前
        1
  •  0
  •   i_am_jorf    14 年前

    导航代码都是异步的,所以您所能做的就是接收DWBE2::BeforeNavigate2并等待它触发。你不需要睡觉,只要让你的信息循环运行。

    在事情发生之前没有办法知道会发生什么。有很多简单的案例,比如“是不是 <a> 标签,但有一个接近无限的方法来导航,即 onclick setTimeout() 以某种偷偷摸摸的方式浏览浏览器,或者根据随机数浏览。另一种方法是嵌入一个带有xsl样式表的xml文件,其顶部有一个CDATA块,该块包含通过document.write()更改window.location的javascript(seriouslypop-up-blocker必须处理这种情况)。

    因此,基本上,如果不事先做大量分析(即解析HTML、javascript等),就无法判断。

        2
  •  0
  •   Greg Domjan    14 年前

    让BeforeNavigate2事件接收器引发一个事件,并让发送click消息的进程等待该事件(以及其他一些安全超时),怎么样?

    您的描述中似乎没有提到为什么要等待,单击后的下一个操作是否只有在导航成功的情况下才会发生-也许用户可以配置?