zoukankan      html  css  js  c++  java
  • winform中webBrowser模拟网页操作中遇到的问题

    我们通过网页上传一些特殊数据的时候,由于必填项众多,数量量大的时候,会发现工作相当繁琐,前段时间做了一个winform内嵌webBrowser模拟网页上传文档的小工具,发现了许多问题,总结一下:

    先说明的是文档是用Excel指定格式制成的表格,数据是通过循环表格数据行上传的。

    需求是如果文档已经上传那么必须提示,但上传成功不必提示(因为循环上传的话会弹出很多提示框)。

    代码如下:
    添加引用 在扩展程序集中找到Microsoft.mshtml
    using mshtml;

    在窗体类上面贴标签: [ComVisible(true)]//访问 com 引用 microsoft html object library

    代码如下:

            private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
            {
                IHTMLWindow2 ihtmlWin = webBrowser1.Document.Window.DomWindow as IHTMLWindow2;
                StringBuilder strAlertBuilder = new StringBuilder();
                strAlertBuilder.Append("var _alert=window.alert;
    ");
                strAlertBuilder.Append("window.alert=function(s){
    ");
                strAlertBuilder.Append("window.external.alertMessage(s);}");
                ihtmlWin.execScript(strAlertBuilder.ToString(), "Javascript");
                if (!string.IsNullOrEmpty(alertmsg) && alertmsg.Contains("该报告编号已存在"))
                {
                    MessageBox.Show(alertmsg);
                    alertmsg = null;
                }
                else if (!string.IsNullOrEmpty(alertmsg) && alertmsg.Contains("提交成功"))
                {
                    alertmsg = null;
                }
            }
    
         public void alertMessage(string s)
            {
                alertmsg = s;
            }
    View Code

    当时在private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)事件中也试用了上述方法,效果不理想,因为很多弹窗不是网页加载完成才出来的。

    另外我是在win7系统编写的,开发环境下测试是没问题的,考虑到兼容性,使用的是C#2.0 .NET Framework,但是在许多的xp系统中发现webBrowser1_Navigated经常不能触发,经测试发现,很多xp系统是没有Microsoft.mshtml类的,win7上找不到目录,我从另外一台xp机拷贝下来,目录地址是C:Program FilesMicrosoft.NETPrimary Interop AssembliesMicrosoft.mshtml.dll,删除原有Microsoft.mshtml引用,将拷贝下来的类库添加进程序的Lib目录,并引用,引用属性设成 复制本地=True;特定版本=False,问题解决。

     

  • 相关阅读:
    算法疑难(js实现)---5、变态跳台阶
    算法疑难(js实现)---4、跳台阶(记忆化递归)
    算法疑难(js实现)---3、两个栈来实现一个队列
    算法疑难(js实现)---2、重建二叉树
    Ext的Panel总结(好文章)
    Extjs datefield 日历控件中文显示
    EXTJS项目实战经验总结一:日期组件的change事件:
    ExtJs内的datefield控件选择日期过后的事件监听select
    ExtJs FormPanel布局
    开发extjs常用的插件
  • 原文地址:https://www.cnblogs.com/riddly/p/4151048.html
Copyright © 2011-2022 走看看