最近写了个软件叫WebBrowser,目的用于,网页的自动操作处理,就是说,所有你在网页上面的操作,都可以录到一个脚本中,然后可以回放这个操作过程。。我是说任何过程。
程序是用C#写的,其中遇到了一个难题,对于网页,我是用C#内置的WebBrowser控件控制,但是这个控件有个问题,就是对于一些网页上的链接,如果你在IE打开的时候,它是在新窗口打开的话,这时候,你在WebBrowser点击的话,它会傻不垃圾的打开IE来浏览,这样的话,我怎么在我的程序控制新打开的网页啊,真是的,必须使用所有点击的网页都在我的WebBrowser里面打开,我才可以控件其自动化动作处理。
但是,这么巧,C#内置的WebBrowser就是没有强制使这一实现的方法,于是又google了海内外,发现真是没有什么好办法,健壮,稳定的方法,唉,又得自已解决。。。
一般在网页点击了一个一个在新窗口打开的链接,这时刻,WebBrower的StatusText会是新链接的url,这时候,可以使用MainBrowser_NewWindow消息,使用e.Cancel=true,取消息打开新窗口动作,然后使用WebBrowser.Navigate(刚才的url),这样就可以达到不调用IE打开新窗口的目的。
但是有时候,StatusText不是准确的新窗口的url,这时候,WebBrowser反而会打开错的网页。不信,懂编程的朋友可以试一下http://www.hao123.com/上面的百度一下的按钮,你得到的是www.baidu.com/s的url,可是这不是真正的新窗口的url,怎么办呢。。。
其实,网页会在新窗口打开链接,是因为链接里面有一个属性target设置成blank了,如果我们把它设置回_self,那就OK了。。。
结合上面的分析,我的解决方法如下:
代码说明一切吧,如下:
上面是第一次避免,下面是第二种分析实现,使用装载回来的网页上面所有的控件的target属性修改还_self.