网页是自己写的,网页中有一个 下一连接 的连接,在网页的代码中为<a href="Next.htm">
该连接的路径并不是具体的路径,而是根据当前网页的名称,比如当前为 11.htm,那么下一个就应该是12.htm,
而不是Next.htm,所以我想在CWebBrowser2控件中实现这一功能,该如何实现呢?
在我点击 下一个连接的时候,是不是可以获取到 Next.htm,以及当前的网页名称11.htm,然后再根据
11.htm,得到12.htm,从而实现该功能,具体如何实现???

解决方案 »

  1.   

    使用javascript就可以实现了.干嘛搞得这么麻烦?
      

  2.   

    get_LocationURL()等获取url后,自己拼接字符串等,Navigate到下一个...
      

  3.   

    没看到OnBeforeNavigate,只有OnBeforeNavigate2
    我在OnBeforeNavigate2消息函数里再调用
    Navigate2或者Navigate,就又会立即响应了OnBeforeNavigate2这个消息函数,
    这样就一直循环 下去了,根本没法实现跳动第二页
      

  4.   

    有一个OnNewWindow3,你具体查查。
    你需要拦截当前的URL,然后重新Navigate到新链接~
      

  5.   

    我刚开始的网页是用Navigate2函数来实现的,
    当我在网页里点击 下一个连接 现在只有OnBeforeNavigate2消息能响应,
    OnNewWindow3,OnNewWindow2这两个消息函数都没响应
      

  6.   

    那就是这个了 OnBeforeNavigate2,你BOOL* pbCancel 
    pbCancel
    A pointer to a cancel flag. An application can set this parameter to nonzero to cancel the navigation operation, or to zero to allow it to proceed. 
    然后再自己控制链接到新页面
      

  7.   

    void CTest1Dlg::OnBeforeNavigate2ExplorerWeb(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel) 
    {
    // TODO: Add your control notification handler code here
    CString url = URL->bstrVal;
    if (url=="E:\\工作\\工程\\TEST\\Test1\\Next.htm")
    {
    url="E:\\工作\\工程\\TEST\\Test1\\0002.htm";
    URL->vt = VT_BSTR;
    URL->bstrVal = url.AllocSysString();
    *Cancel=VARIANT_FALSE;
    }
    }
    1、在这个消息函数里是不能再调用Navigate2,会导致无限循环
    2、当前网页为"E:\\工作\\工程\\TEST\\Test1\\0001.htm",
    当我点击 下一连接 时,URL参数中的值是"E:\\工作\\工程\\TEST\\Test1\\Next.htm",
    然后我重新给赋了我想要的值,"E:\\工作\\工程\\TEST\\Test1\\0002.htm",
    但是控件中是 无法显示网页 的提示,而这两个网页都是存在的。
      

  8.   

    我也晕了,这个绝对和相对路径会有影响吗,我初始的时候就是用的绝对路径也可以显示的啊,
    再说了,那个URL的参数传进来的也是绝对路径的,
    如果是用函数GetLocationURL();取得的路径修改完也是不行,真不知道是怎么回事
      

  9.   

    可以了分享下:
    void CTest1Dlg::OnBeforeNavigate2ExplorerWeb(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel) 
    {
    // TODO: Add your control notification handler code here
    // CString url="file:///E:/工作/工程/TEST/Test1/0001.htm"; CString strNavUrl,strUrl,strTmp,strLocUrl;
    int iNumBeg,iNumEnd;
    strUrl = URL->bstrVal;
    if (strUrl.IsEmpty())
    {
    return;
    }
    iNumBeg=strUrl.ReverseFind('\\');
    iNumEnd=strUrl.GetLength();
    strTmp = strUrl.Mid(iNumBeg+1,iNumEnd-iNumBeg-1);
    if (strTmp=="Next.htm")
    {
    strLocUrl=m_WebBrowser.GetLocationURL();
    if (strLocUrl.IsEmpty())
    {
    return;
    }
    int iNumA=strLocUrl.ReverseFind('/');
    int iNumB=strLocUrl.ReverseFind('.');
    CString strTemp=strLocUrl.Mid(iNumA+1,iNumB-iNumA-1);
    strNavUrl=strLocUrl.Left(iNumA+1);//
    int iIndex=atoi(strTemp);
    strTemp.Format("%04d.htm",iIndex+1);
    strNavUrl+=strTemp;//
      COleVariant  var;   
    m_WebBrowser.Navigate(strNavUrl,&var,&var,&var,&var); 
    *Cancel=VARIANT_TRUE;
    }
    }
    只是不明白,为什么像10楼所述,改变了URL不能重定向
      

  10.   

    那你还是别用GetLocationURL,自己写相对路径来转移。我就是这样的~