在WebBrowser1里怎样开新网页不用IE弹出,而改成用谷歌浏览器chrome弹出?

clintonus 2011-11-12 08:13:35
我的意思是在WebBrowser1里调入网页后,点了网页里的链接(比如我用百度搜索出来的一条条结果)后,不用IE弹出,而改成用谷歌浏览器chrome弹出?
先前坛子里大侠支招说用WebBrowser1_BeforeNavigate2,加判断url.这个方法我后来觉得实现不了,因为百度搜索出来的结果url是没有规律的,可以是任何网址.
后来我在别的地方找到个人家不是这个用chrome打开的问题,但是我改造了一下的.但是这个方法有缺陷,我贴出来请教高人帮看下,怎么才能完全呢稳定实现:
Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)
Cancel = True
shell "c:\chrome.exe " & WebBrowser2.Document.activeElement.href
End Sub
测试的结果是如果webbrowser1用的google搜索,那就根本打不开网页(其它搜狗 搜搜 bing 雅虎都可以,就是google不行,我看了下google它初打开时候的网址是个过渡网址,然后才跳转到真正的地址).
另外比如搜搜的缓存页点击也会出错,还有很多网页上的链接点解都会出错,比如zhaofile.com这个网站上的链接.
为什么呢?要怎么才能稳定实现呢?

多谢!!
...全文
1132 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
clintonus 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 supermanking 的回复:]
要完整的URL地址,如:
http://topic.csdn.net/u/20111112/20/77e5e243-2617-4693-bdfe-2cd4eaf14709.html
[/Quote]
谢谢!google的已经解决,自己提取和转换一下可以了.
但是搜搜的快照页没解决,它那个好像比较变态,从webbrowser或者ie搜索结果页面上点击都可以正确打开,但是如果你自己手工复制它那个快照的网址到地址栏去访问就会说"你的访问非法,将自动跳转到搜搜首页",
比如这个是搜bbbbbbbbbbbbb的结果页:
http://www.soso.com/q?pid=s.idx&cid=s.idx&w=bbbbbbbbbbbbb
然后这个是它第一条结果:http://snapshot.soso.com/snap.cgi?d=9039524014151510246&w=bbbbbbbbbbbbb&u=http://v.youku.com/v_show/id_XMTY3NDgwMjky.html
如果把这个结果网址手工粘贴到地址栏去访问,就报错,自动跳到搜搜首页去了.

可能是腾讯加了什么限制,前面那个d=9039524014151510246不知道是不是个动态生成的一次性的标识码,如果是这样的话那估计就一点办法都没了.
现在还是人类 2011-11-13
  • 打赏
  • 举报
回复
要完整的URL地址,如:
http://topic.csdn.net/u/20111112/20/77e5e243-2617-4693-bdfe-2cd4eaf14709.html
clintonus 2011-11-13
  • 打赏
  • 举报
回复
刚msgbox了一下那个WebBrowser2.Document.activeElement.href,得到是这样的:
/url?sa=t&rct=j&q=bbbbbbbbbbbbbbbbbb&source=web&cd=8&ved=0CFoQFjAH&url=http%3A%2F%2Fbbs.ocer.net%2Fthread-227072-1-1.html&ei=ty-_ToaYELGaiQeQ5YnxBA&usg=AFQjCNEABF4PyCnD3mF3EWiBHQFR7XrxMg
这是我搜索bbbbbbbbbbbbbbbbbb的到的结果中的一个,它应该就是google搜索的一个中间跳转地址,把这个东西复制到地址栏去是打不开任何网页.估计得自己把其中真正地址http%3A%2F%2Fbbs.ocer.net%2Fthread-227072-1-1.html提取和转换(其中的%3A%2F%2F应该是://的转码)出来才行.google的挺特殊的,其它百度之类的都是直接最终地址,没有过渡地址.

clintonus 2011-11-13
  • 打赏
  • 举报
回复
我chrome是已经设为默认浏览器了
clintonus 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 supermanking 的回复:]
修改注册表说手动设置默认浏览器为谷歌,然后用 API ShellExecute 调用 URL
ShellExecute 0,"open",WebBrowser2.Document.activeElement.href,"","",5
[/Quote]
多谢!
我使用之后报错说:
实时错误453
找不到dll入口点 shellexecutea in shell32.dll

这是不是应该还是因为获得的webBrowser2.Document.activeElement.href这个参数不对引起的?

ShellExecute的声明是这样吧:
Private Declare Function ShellExecute Lib "shell32.dll " Alias "ShellExecuteA " (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

clintonus 2011-11-13
  • 打赏
  • 举报
回复
那那个太复杂了,我太菜弄不来的.我是自己窗体里面嵌很多个webbrowser,方便一次性浏览,但是ie太慢了,所以想改成chrome打开.
chrome又不能嵌入自己的程序窗体,要不然能把chrome嵌入自己的窗体那是最好了.
多谢!
现在还是人类 2011-11-13
  • 打赏
  • 举报
回复
如果你的目的是开发浏览器,最好自己写解码和图形过程,不然用 IE 内核只是换个UI意义不大。
还不如直接调用现成浏览器来得简单可靠。
如果你是想捕获浏览器的内容加以处理,可以用 BHO 技术实现这种过程,只是有些浏览器可能有
自己的一套接口,如火狐等就和 IE 的 BHO 接口不一样,需要单独处理。
如果你只是想在自己的程序里附带的弄一些浏览器的功能,这种 UI 或解码上的问题不用太去理会
他的,毕竟是附属功能,有那个意思就好了,主要还是其他的功能。
clintonus 2011-11-13
  • 打赏
  • 举报
回复
再请教下大侠们,这个过程:
Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)
Cancel = True
End Sub
有没有什么办法可以在程序运行过程中动态地让它失效呢?就是比如我按某个按钮以后这个过程就作废,以便我可以ie和chrome兼得呢?按这个按钮以后就还是可以用IE而不是chrome来打开了.
应该可以弄个变量比如truefalse,按钮按下就truefalse=false,这样cancel就=false了,但是这个如果我窗体中有多个webbrowser的话就会导致所有的webbrowser都改用IE了?
现在还是人类 2011-11-13
  • 打赏
  • 举报
回复
修改注册表说手动设置默认浏览器为谷歌,然后用 API ShellExecute 调用 URL
ShellExecute 0,"open",WebBrowser2.Document.activeElement.href,"","",5
无·法 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 clintonus 的回复:]
我的意思是在WebBrowser1里调入网页后,点了网页里的链接(比如我用百度搜索出来的一条条结果)后,不用IE弹出,而改成用谷歌浏览器chrome弹出?
先前坛子里大侠支招说用WebBrowser1_BeforeNavigate2,加判断url.这个方法我后来觉得实现不了,因为百度搜索出来的结果url是没有规律的,可以是任何网址.
后来我在别的地方找到个人家不是这个用chrome打开的问题,……
[/Quote]研究下ppDisp对象

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧