zoukankan      html  css  js  c++  java
  • WebBrowser中打开新页面保留sessionid

    大家有兴趣可以加我QQ群交流:14792063 广州软件开发团队

    前几天写的网上订舱辅助系统,物流组反馈如果遇到意外情况,网站弹出交互新窗口,可是内容却看不到.测试后发现是由于新窗口打开在IE中,与当前会话失去了联系,所以要求重新登录,流程不能继续,要解决这个问题,必须要求新打开的网页受控于WebBrowser.

    为解决这个问题,先百度后google,发现有好多人在问,可是解决办法大都不可靠,或语焉不详,或文不对题,最后终于找到了一篇文章解决了这个问题.鉴于这个问题的普遍性,我也把解决办法列出来,好让网友搜索时能多一点帮助.

    解决办法很简单,分两情况,一是在当前WebBrowser中打开新页面,二是在新Form中的WebBrowser中打开新页面:

    代码
            public Form1()
            {
                InitializeComponent();

                
    this.webBrowser1.AllowWebBrowserDrop = false;  //可在属性里设置,很重要


                
    //在新Form中的WebBrowser中打开
                (this.webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).NewWindow2 += new SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(Form1_NewWindow2);

                
    //在主WebBrowser中打开
                
    //(this.webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(Form1_NewWindow3);
            }

            
    void Form1_NewWindow2(ref object ppDisp, ref bool Cancel)
        {
          Form5 frm 
    = new Form5(); //事先建好一个带WebBrowser的窗体
          ppDisp = frm.webBrowser1.ActiveXInstance;
          frm.Show();
        }

            
    void Form1_NewWindow3(ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl)
            {
                Cancel 
    = true;
                
    this.webBrowser1.Navigate(bstrUrl);
            }

    然后如果在新窗口打开新页面,主页面和新页面在同一会话中,可互相影响了.

    另:SHDocVw.dll 在 C:/WINDOWS/SYSTEM32下,要引用到项目中来,这个是基础,不应该有疑问吧.

     

  • 相关阅读:
    标准C++中的string类的用法总结
    JSON用法简介
    拷贝构造函数的调用时机
    define中的:#,##,#@
    一个二维码支持支付宝和微信支付(下)
    一个二维码支持支付宝和微信支付(上)
    【JAVA笔记】JAVA后端实现统一扫码支付:微信篇
    java生成二维码,读取(解析)二维码图片
    Java程序员的日常—— IOUtils总结
    Java: Map里面的键和值可以为空吗?
  • 原文地址:https://www.cnblogs.com/welcomesay/p/1802161.html
Copyright © 2011-2022 走看看