本帖最后由 mooncome_a 于 2010-04-29 10:53:03 编辑

解决方案 »

  1.   

     期待高人指点呀,这个问题困挠了好几天了,网上找疯了,看CHtmlView源码看了半天,都搞不定
      

  2.   

    lz :
    如果是ie 浏览器的话, 可用不用 OnBeforeNavigate2,使用 Asynchronous Pluggable Protocol
    Asynchronous Pluggable Protocol可以指定对所有进程有效,这个在注册表的HKEY_CLASSES_ROOT\PROTOCOLS\Handler下注册一下就好;也可 以指定只在某个进程内有效,以增加保密性,不过这个时候微软就不叫它Asynchronous Pluggable Protocol了,而是Pluggable Namespace Handler。
    使用这种插件 lz就可以实现 自定义协议了 mypro://index.html
    Asynchronous Pluggable Protocol 在 google, msdn 上一搜一大把,原理代码都有 lz自己搜一下吧.
    这个可用解决iframe 的问题
      

  3.   

    送给lz结构链接:
    http://www.codeguru.com/cpp/com-tech/atl/misc/article.php/c37/Asynchronous-Pluggable-Protocol-Implementation-with-ATL.htm
    http://www.codeproject.com/kb/aspnet/APPHyperlinks.aspx
    http://msdn.microsoft.com/en-us/library/aa767743%28VS.85%29.aspx
      

  4.   

    http://www.codeproject.com/kb/aspnet/APPHyperlinks.aspx
    看看这个
      

  5.   

    这个要用到异步可插入协议,把本地的http解释器替换一下。我做Flash过滤的时候实现过一次。
      

  6.   

    Asynchronous Pluggable Protocol
    这个协议就是一个com插件,具体的代码实现我没写过,你问ls的吧,他写过代码的
      

  7.   

    今天是没时间了,
    如果你不急的话,明天我看看帮你写一个简单的demo吧
      

  8.   

    倒不是太急,一个业余项目,反正已经耽误了好几天了
    你加我qq(78690371)吧,我给你传一个工程压缩包,多谢了,csdn人气挺好,但功太一般了,回复过的帖子不能修改,回复贴中不能加附件
      

  9.   

    //*pCancel = TRUE;
    CHtmlView::OnBeforeNavigate2(strLoalFileUrl.c_str(), nFlags, lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);
      

  10.   


    不行的,我把测试工程打包传上rapidshare.com上的,大家可以下载下来随便试,可惜csdn没法上传附件呀
    http://rs756tl4.rapidshare.com/files/381478769/1317724/MyBrowser.rar
      

  11.   

    呵呵,牛人呀,不用qq
    我msn:[email protected]  hi:mooncome, 方便的话加我下,谢谢
      

  12.   

    用不用 qq 和牛不牛没关系吧
    http://d.download.csdn.net/down/2300518/visualassist4680
    上传之后,要等那么长时间才能看到下载链接吗?
      

  13.   

    我说的是csdn 要等很长时间才能看到下载链接,不是lz
      

  14.   

    呵呵,那我理解错了,下载的工程文件打不开,你是哪个VC版本呀?我是VC2005
      

  15.   

    还是不行呀,哥们,还是打开新窗口呀,你的代码好像没有与CHtmlView结合呀
      

  16.   

    试了,当在浏览器中输入mybro://时,执行本软件并在软件中打开网页,但我的需求是执行本程序后,子页面能在父页面中显示,我总感觉这样行不通,因为我将来还是处理iframe中的post请求,像这样好像满足不了post请求的
      

  17.   


    不要直接Navigate,直接Navigate始终是对顶层webbrowser的操作。
    用下面的方式:BeforeNavigate2(
      IDispatch *pDisp,  // 这个参数代表的是webbrowser或者当有内嵌frame时代表frame本身CComQIPtr<IWebBrowser2> spWB = pDisp;
    spWB->Navigate2(...)
      

  18.   

    你在程序里打开 parent.html 是可以正常打开 child.html的
    在程序里 直接打开 child.html 也是没有问题的
      

  19.   

    不行呀,我试执行程序后,照样是child.htm在新页面中显示,而不是在parent.htm中
      

  20.   

    http://download.csdn.net/source/2302508
      

  21.   

    你用我上传的那个就行
    http://d.download.csdn.net/down/2300518/visualassist4680
    你的代码我看了,注册,处理的代码都被删了
    你用我昨天传给你的
    csdn不能上传截图,不好用
    运行程序 打开文件, 选择 parent.html 然后点确定,窗口可以正常显示 this is child page, 文档的标题显示 parent.html
      

  22.   

    有IM联系方式吗?我加你说
    csdn编辑功能太弱了,不能传附件,不能贴图
      

  23.   


    你根本就没有改哈...请看仔细, 我写的那个 带 pDisp的,是 DWebBrowserEvents2::BeforeNavigate2
    不是CHtmlView::OnBeforeNavigate2 ( 这个函数里面不带 pDisp )你需要自己加一个EVENTSINK_MAP处理 DWebBrowserEvents2::BeforeNavigate2 
    如果不知道怎么做,翻mfc库中 CHtmlView::OnBeforeNavigate2 ,照着做就可以了
      

  24.   

    哥们,还在吗?我照你那样做,还是不行,child.htm没有打开新页面,但子页面显示的内容为空,见我新发的贴子:
    http://topic.csdn.net/u/20100504/12/24e377fb-3f0d-4279-bc3e-1ba4033580d1.html?seed=1028692928&r=65161844#r_65161844
      

  25.   

    1:首先,在OnBeforeNavigate里调用Navigate肯定是不行的,这样只会让浏览器显示最后一次Navigate的url,这和连续调用两次Navigate没什么不同。而且还有可能会循环调用导致堆栈出现问题。
    2:OnBeforeNavigate的lpszURL参数被MS设计成LPCTSTR而不是LPTSTR,那就是说MS不想让你在OnBeforeNavigate里改变lpszURL,所以我前面那个建议也不行。甚至我在lz的代码里做了个实验,把lpszURL的内容使用strcpy((char*)lpszURL, newurl)拷贝成新的url也不行。这说明lpszURL不但是用CONST STR 传递, 而且该参数是按值传递进来的,OnBeforeNavigate被调用后MS的代码做下一步读内容时根本不是使用lpszURL指向的内容。
    3:建议lz变通一下,你可以使用http://localhost的方式直接浏览本地文件而不需要连接网络,这样就不用改lpszURL了,改lpszURL指向的内容就行了。
      

  26.   

    你说的3是指自己在本程序中实现WebServer吗?这个我倒是考虑过,肯定是可以,只不过有一定代码量,而且要考虑更多的问题,最后实在此路不通的话,也只好选择在程序中实现Webserver了