在winfrom下利用c#代码,实现kindEditor的JavaScript方法:editor.html(),实现上报窗体的自动提交。...

     由于工作需要,我要实现web表单的自动提交功能。最近网站改版在线编辑器采用了KindEditor,用原来的软件不能继续工作了,经过一周努力,终于实了再次自动提交上报的功能,现在总结记录如下。

     一、原来网站提交的方式:

View Code
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
            {
                //定义临时列表数组
                ArrayList Als = new ArrayList();
                //判断List1中是否还有数据
                if (listBox1.SelectedItems.Count > 0)
                {
                    //对象转换
                    SendEntity se = listBox1.SelectedItems[0] as SendEntity;
                    //对象加入到临时数组
                    Als.Add(listBox1.SelectedItems[0]);
                    //页面数据加载并上报
                    HtmlElement WebTitle = webBrowser1.Document.All["InforReport1_txtTitle"];
                    HtmlElement WebZaiyao = webBrowser1.Document.All["InforReport1_txtSummary"];
                    HtmlElement WebContent = webBrowser1.Document.All["InforReport1_dnBox"];
                    HtmlElement WebLaiyuan = webBrowser1.Document.All["InforReport1_txtInfoFrom"];
                    HtmlElement WebSumbit = webBrowser1.Document.All["InforReport1_btn"];

                    WebTitle.SetAttribute("value", se.Title);
                    WebLaiyuan.SetAttribute("value", se.Sour);
                    WebContent.SetAttribute("value", se.Cont);
                   

                    WebSumbit.InvokeMember("click");


                    foreach (object obj in Als)
                    {
                        listBox1.Items.Remove(obj);
                    }
                    //清除临时数组
                    Als.Clear();

                    loading = false;
                }

    由于改版后的系统用了KinEditor在线编辑器,该编辑器是通过JavaScript在客户端生成的,并且需要执行JavaScript的editor.html('新内容')方法,才能赋值,采用原来的方式不能赋值。

    二、以前做过的步骤

    1、使用闪游浏览器后,发现提交地址变化了,以为后台提交地址改变。使用webBrowser1.Url,发现地址并没变化,并且通过矿工min浏览器验证,后台提交地址确实未变化。解决过个问题的思路错误。

    2、以为“C#”提交的数据有过多的Html标签,影响的了赋值。(1)采用正则表过式过滤去掉多余标签;(2)采用webBrowser过滤标签方法。

View Code
  string s = "";
                    using (WebBrowser web =new WebBrowser())
                    {
                        web.Visible=false;
                        web.DocumentText = se.Cont;
                        web.Document.Write(se.Cont);
                        s = web.Document.Body.OuterText;
                    }

参考:C# RichTextBox显示html文本内容

   3、经过多次失败分析,需要webBrowser安装执行新的JavaScript脚本。通过搜索找到IEBrowse可以实现该功能。

View Code
  #region 用IEBrowser方法执法javascript
                    IEBrowser ie = new IEBrowser(this.webBrowser1);
                    ie.InstallTrace();
                    #region 变量设置测试成功
                    //需要先用javascript访问c#变量
                    string jsString = "var tit,sou,con;"+
                    "function setAll(title,soure,cont){" +
                        "tit=title;"+
                        "sou=soure;"+
                        "con=cont;"+
                        "alert(tit+'-'+sou+'-'+con);"+"}";
                    ie.InstallScript(jsString);
                    webBrowser1.Document.InvokeScript("setAll", new string[] { se.Title,se.Sour,se.Cont});
                    #endregion
                    //得再
                    //执行javascrrpt语句,设置值
                    string js = "function myfn(){" +
                            "document.getElementById('InforReport1_txtTitle').value=tit;" +
                            "document.getElementById('InforReport1_txtInfoFrom').value=sou;" +
                            "editor.html(con);" +
                            "" + "}";
                    ie.InstallScript(js);
                    ie.ExecuteScript("myfn()");
                    //webBrowser1.Document.InvokeScript("myfn");
                    #endregion

改进后的代码:

View Code
 if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
            {
                //定义临时列表数组
                ArrayList Als = new ArrayList();
                //判断List1中是否还有数据
                if (this.listbSend.Items.Count > 0)
                {
                    //对象转换
                    SendEntity se = this.listbSend.Items[0] as SendEntity;
                    //对象加入到临时数组
                    Als.Add(this.listbSend.Items[0]);
                    //页面数据加载并上报
                    
                    #region 用IEBrowser方法执法javascript
                    IEBrowser ie = new IEBrowser(this.webBrowser1);
                    ie.InstallTrace();               
                    //执行javascrrpt语句,设置值
                    string js = "function myfn(tit,sou,con){" +
                            "document.getElementById('InforReport1_txtTitle').value=tit;" +
                            "document.getElementById('InforReport1_txtInfoFrom').value=sou;" +
                            "editor.html(con);" +
                            "" + "}";
                    ie.InstallScript(js);
                    webBrowser1.Document.InvokeScript("myfn", new string[] { se.Title, se.Sour, se.Cont });
                    HtmlElement WebSumbit = webBrowser1.Document.All["InforReport1_btn"];
                    WebSumbit.InvokeMember("Click");
                    #endregion
                    //处理数据标记
                    se.IsSend = "已上报";
                    new SendDAO().Updata(se);
                    //清除数据列表项
                    foreach (object obj in Als)
                    {
                        this.listbSend.Items.Remove(obj);
                    }
                    //清除临时数组
                    Als.Clear();
                    //List中选中下一项.
                    this.listbSend.SelectedIndex = 0;

                }

总结,通过软件版本的改进,学习了新的知识点,并实现了新功能如网站的自动登录。

 

转载于:https://www.cnblogs.com/hbjohnsan/archive/2013/04/28/3048444.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值