zoukankan      html  css  js  c++  java
  • 在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;
    
                    }

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

  • 相关阅读:
    STM32对HAL库的LCD驱动移植
    stm32对HAL库的DAC使用
    STM32对HAL库的ADC(多通道DMA)
    STM32对HAL库的ADC(单通道非DMA)
    STM32 fputc函数(重定向)
    STM32的HAL库DMA串口不定长度的读写操作(二)
    STM32对HAL库的PWM控制
    STM32对HAL库的定时器中断
    STM32对HAL库的外部中断处理
    C#上位机制作之串口接受数据(利用接受事件)
  • 原文地址:https://www.cnblogs.com/hbjohnsan/p/3048444.html
Copyright © 2011-2022 走看看