zoukankan      html  css  js  c++  java
  • C#通过webbrowser控件与javascript交互

    1.C#里调用控件里面网页的js函数
        //调用JavaScript的messageBox方法,并传入参数
        object[] objects = new object[1];
        objects[0] = “C#访问JavaScript脚本";
        this.webBrowser1.Document.InvokeScript(“messageBox", objects);//object就是传入的参数,而messageBox则是网页中预定义好的js函数。
    通过这种方式C#里面就可以执行Javascript函数,可以把上面的代码放到一个button的click事件里面。

    2.webbrowser控件里网页js调用C#窗体的函数
    首先需要在代码里面加上
    [System.Runtime.InteropServices.ComVisibleAttribute(true)] 
        public partial class Form1 : Form{
             …..//
        }
    这样使得C#的com对象是对网页里的javascript可见的。
    然后在嵌入网页里面通过“window.external.MyMessageBox(‘javascript访问C#代码’)" ,即通过window.external捕获调用c#定义好的函数。

    具体Form.cs代码如下(通过vs创建的c#window窗体应用,拖拽上一个webbrowser控件和button控件。):
    		[System.Runtime.InteropServices.ComVisibleAttribute(true)]
            public partial class Form1 : Form
            {
                public Form1()
                {
                     InitializeComponent();
                     System.IO.FileInfo file = new System.IO.FileInfo("test.html");                
                     this.webBrowser1.Url = new Uri(file.FullName); // WebBrowser控件显示的网页路径                
                     this.webBrowser1.ObjectForScripting =this;// 将当前类设置为可由脚本访问
                 } 
    
    
    			//提供给JavaScript调用的方法
                public void MyMessageBox(string message)
                {
                    MessageBox.Show(message);
                } 
    
    
    			private void button1_Click_1(object sender, EventArgs e)
                {
                    //调用JavaScript的messageBox方法,并传入参数
    				object[] objects = new object[1];
    				objects[0] = “C#访问JavaScript脚本";
    				this.webBrowser1.Document.InvokeScript("messageBox", objects);
    			}
    		}


    test.html内容比较简单:

    <html>
    	<head>
    		<meta http-equiv="Content-Language" content="zh-cn">
    		<script language="javascript" type="text/javascript">
    			<!– 提供给C#程序调用的方法 –>
    			function messageBox(message)
    			{
    				alert(message);
    			}
    		</script>
    </head>
    <body>
    	<!– 调用C#方法 –>
    	<button onclick="window.external.MyMessageBox('javascript访问C#代码')" >javascript访问C#代码</button>
    </body>
    </html>


    配置运行成功的话,可以看到相互调用的效果

  • 相关阅读:
    【BZOJ】1076: [SCOI2008]奖励关(状压dp+数学期望)
    【COGS & USACO】896. 圈奶牛(凸包)
    【wikioi】1553 互斥的数(hash+set)
    【wikioi】1229 数字游戏(dfs+水题)
    【COGS】714. USACO 1.3.2混合牛奶(贪心+水题)
    【wikioi】1403 新三国争霸(dp+kruskal)
    【wikioi】1108 方块游戏(模拟)
    [LeetCode] 270. Closest Binary Search Tree Value 最近的二叉搜索树的值
    [LeetCode] 261. Graph Valid Tree 图是否是树
    [LeetCode] 486. Predict the Winner 预测赢家
  • 原文地址:https://www.cnblogs.com/zhangqs008/p/3618422.html
Copyright © 2011-2022 走看看