代码改变世界

Winform启动隐藏,WebBrowser交互JS

2014-06-06 11:53  stoneniqiu  阅读(1155)  评论(0编辑  收藏  举报

  一、启动隐藏  

  Winform比较奇怪,Load的时候设置Visiable=false,无效。webBrowser_DocumentCompleted之后调用hide隐藏了窗体,但是在notifyIcon调用show也不能打开窗体。各种奇葩问题。最后stackOverFlow上找到答案。设置透明度,和取消显示在任务栏。

 private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.ObjectForScripting = this;
            WindowState = FormWindowState.Minimized;
            Opacity = 0;
            ShowInTaskbar = false;
        }

 在notifyIcon点击的时候触发:

 private void SCADAnotifyIcon_Click(object sender, EventArgs e)
        {
            if (WindowState != FormWindowState.Normal||Visible==false)
            {
                WindowState = FormWindowState.Normal;
                Visible = true;
                Opacity =1;
                ShowInTaskbar = true;
            }
            else
            {
                Visible = false;
            }
        }

达到想要的效果,启动后隐藏,只出现在托盘中。托盘再打开。

二、JS与C# 交互

  1.C#调用webbrowser中的JS

  javascript方法:

      function localversion(version) {
            $("#loadedversion").html(version);
        }
        function setName(name) {
            $("#pname").html(name);
        }

传递参数必须是objects数组。

        /// <summary>
         /// 调用JS的方法设置一些信息
        /// </summary>
        /// <param name="o">The o.</param>
        /// <param name="f">The f.</param>
        private void InvokeJs(object o, string f)
        {
            _objects[0] = o;
            if (webBrowser1.Document != null) 
                webBrowser1.Document.InvokeScript(f, _objects);
        }
        private readonly object[] _objects = new object[1];

调用的时候:

    private void CheckLocal()
        {
            InvokeJs(ConstFile.ROOLBACKFILE, "setName");
            InvokeJs(_autoUpdater.GetLoadedVersion(), "localversion");
        }

 2.js调用C#。

 需要在方法或者类上面标记:

   [System.Runtime.InteropServices.ComVisible(true)]

在html页面中直接对应过来即可。

 <button id="checkUpdate" onclick="window.external.CheckUpdate()" class="btn btn-success btn-small">检查更新</button>
<button id="installer" class="btn btn-info  btn-small" onclick="window.external.RunInstaller()"  >安装</button>

这两个按钮会分别触发Form中的方法:

        /// <summary>
        /// 安装
        /// </summary>
        public void RunInstaller()
        { 
           _autoUpdater.RunInstaller();
        }
      public void CheckUpdate()
        {
       //........
       }