原文链接
<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><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>
 
二、建立Windows应用程序
 
1.创建Windows应用程序项目 
2.在Form1窗体中添加WebBrowser控件 
3.在Form1类的上方添加
 
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
这是为了将该类设置为com可访问。如果不进行该声明将会出错。
 
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class Form1 : Form
 
 
Url属性:WebBrowser控件显示的网页路径
 
ObjectForScripting属性:该对象可由显示在WebBrowser控件中的网页所包含的脚本代码访问。
 
将Url属性设置为需要进行操作的页的URL路径。
 
JavaScript通过window.external调用C#公开的方法。即由ObjectForScripting属性设置的类的实例中所包含的公共方法。具体设置例子如下: 
 
 
System.IO.FileInfo file = new System.IO.FileInfo("index.htm");
// WebBrowser控件显示的网页路径
webBrowser1.Url = new Uri(file.FullName);
// 将当前类设置为可由脚本访问
webBrowser1.ObjectForScripting = this;
 
 
5.C#调用JavaScript方法
 
通过WebBrowser类的Document属性中的InvokeScript方法调用当前网页的Javascript方法。如: 
 
// 调用JavaScript的messageBox方法,并传入参数
object[] objects = new object[1];
objects[0] = "C#访问JavaScript脚本";
webBrowser1.Document.InvokeScript("messageBox", objects);
 
 
完整代码如下: 
 
 
==============================================================================
 
JS脚本代码: 
<script language=”javascript”>
function jsAlert(infor)
{
alert(‘我要开网店、携购独立网店系统,模板最全,最专业的系统!’);
return;
}
</script>
  C#代码调用如下:
  using System.Security.Permissions; 
  [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]//  注意: 类定义前需要加上下面两行,否则调用失败!
  [System.Runtime.InteropServices.ComVisibleAttribute(true)] 
 
  调用的函数:
  webBrowser1.Document.InvokeScript("jsAlert ", new string[] {‘ssss’}); 
 
  JS中调用C#函数示例:
 
  C#函数如下:
 
public void ShowMessage(string message)
{
MessageBox.Show(message);
}
 
  JS里的调用方法:
 
<script language=”javascript”>
function InvokeFunc()
{
window.external.ShowMessage(‘呵呵’);
}
</script>
 
  在使用C#开发winform程序过程中,我们经常会碰到嵌入了一个WebBrowser的浏览器控件。很多时候,我们需要在程序里控制网页的显示方式,或者调用网页当中的某个JS函数,反过来,也有可能网页也需要调用程序当中的函数来实现某些功能。下面我给大家讲解下如何互相进行交互。
===========================================================================================================
能否定义一个c# 变量获取js里面定义的 全局变量的指向
JScript code
 
 
<script language="javascript"type="text/javascript">
varg_h=55;
 
functiondisplayVar(varname)
{
try
{
returneval(varname);
}
catch(e)
{
returne.description;
}
}
</script>
 
 
 
c#里面能否实现获取g_h变量指向的内存空间,然后修改他的值。
我现在只能实现,显示他的值,因为eval方法返回了一个新的对象,所以改变不了原来的变量g_h
C# code
 
 
object[] paramArray=newobject[1];
paramArray[0]="g_h";
webBrowser1.Document.InvokeScript("displayVar", paramArray);
 
 
也可以用这样来调用:
webBrowser1.Document.InvokeScript("JS函数名", New Object() {参数})
参数值用:多个参数用分”,“号分开 。
例如:
webBrowser1.Document.InvokeScript("Go", New Object() {"home","back"})
 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
与脚本的互操作 
 
在Case 1当中,我们已经看到,Web页面的HTML元素的事件,可以由Windows Form端来响应,可以在某种程度上看作是Web页面调用WinForm;那么反过
 
来,WinForm除了可以直接访问Web页面的HTML元素之外,能否调用Web页面里的各种Script呢?
 
首先是调用Web页面的脚本中已经定义好的函数。假设HTML中有如下Javascript:
 
function DoAdd(a, b) {
    return a + b;
}
那么,我们要在WinForm调用它,只需如下代码即可:
 
object oSum = webBrowser.Document.InvokeScript("DoAdd", new object[] { 1, 2 });
int sum = Convert.ToInt32(oSum);
其次,如果我们想执行一段Web页面中原本没有的脚本,该怎么做呢?这次.Net的类没有提供,看来还要依靠COM了。IHTMLWindow2可以将任意的字符
 
串作为脚本代码来执行。
 
string scriptline01 = @"function ShowPageInfo() {";
string scriptline02 = @"      var numLinks = document.links.length; ";
string scriptline03 = @"      var numForms = document.forms.length; ";
string scriptline04 = @"      var numImages = document.images.length; ";
string scriptline05 = @"      var numScripts = document.scripts.length; ";
string scriptline06 = @"      alert('网页的统计结果:\r\n链接数:' + numLinks + ";
string scriptline07 = @"         '\r\n表单数:' + numForms + ";
string scriptline08 = @"         '\r\n图像数:' + numImages + ";
string scriptline09 = @"         '\r\n脚本数:' + numScripts);}";
string scriptline10 = @"ShowPageInfo();";
 
string strScript = scriptline01 + scriptline02 + scriptline03 + scriptline04 + scriptline05 +
                    scriptline06 + scriptline07 + scriptline08 + scriptline09 + scriptline10;
 
IHTMLWindow2 win = (IHTMLWindow2)webBrowser.Document.Window.DomWindow;
win.execScript(strScript, "Javascript")

C# winform与Javascript的相互调用[转]的更多相关文章

  1. [转]C# winform与Javascript的相互调用

    C# winform与Javascript的相互调用 <html> <head> <meta http-equiv="Content-Language" ...

  2. Android中通过WebView控件实现与JavaScript方法相互调用的地图应用

    在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用andro ...

  3. C#代码和javascript函数相互调用

    C#代码与javaScript函数的相互调用 问:1.如何在JavaScript访问C#函数?2.如何在JavaScript访问C#变量?3.如何在C#中访问JavaScript的已有变量?4.如何在 ...

  4. iOS中Objective-C与JavaScript之间相互调用的实现(实现了与Android相同的机制)转

    第三方库WebViewJavascriptBridge http://blog.csdn.net/zhaoxy_thu/article/details/22794201 Demo

  5. Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式

    IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 dele ...

  6. iOS原生和H5的相互调用

    为什么现在越来越多的APP中开始出现H5页面? 1,H5页面开发效率更高,更改更加方便: 2,适当缩小APP安装包的大小: 3,蹭热点更加方便,比如五一,十一,双十一搞活动: 那么为什么说H5无法取代 ...

  7. Android和JavaScript相互调用的方法

    转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...

  8. ASP.net关于C#代码与javaScript函数的相互调用

    C#代码与javaScript函数的相互调用 问:1.如何在JavaScript访问C#函数?2.如何在JavaScript访问C#变量?3.如何在C#中访问JavaScript的已有变量?4.如何在 ...

  9. android与javascript相互调用

    下面这一节来介绍android和javascript是怎么相互调用的,这样我们的UI界面设计起来就简单多了,而且UI设计起来也可以跨平台.现在有好多web app前台框架了,比如sencha和jque ...

随机推荐

  1. [Angular] Refactor Angular Component State Logic into Directives

    Allow the base toggle to be a tag (<toggle>) or attribute (<div toggle>). The <toggle ...

  2. Struts2之struts2标签库了解和使用

    一.学习案例:通过演示项目了解和使用struts2的标签库. 二.案例分析:演示项目是我当初跟着马士兵老师的视频学习时关于标签的项目,里面都有凝视,大家执行了解下. 在此我仅仅解说下经常使用的标签. ...

  3. PHP 按位与或 (^ 、&)

    今天朋友群里朋友问了下 按位与或的问题.. 按位于主要是对二进制数操作. <?php $a = 1; $b = 2; $c = $a^b; ?> 这里不是单纯的相加关系 十进制 1换算成二 ...

  4. Android数据与服务器交互的GET,POST,HTTPGET,HTTPPOST的使用

    Android有这几种方式,可以提交数据到服务器,他们是怎么使用的呢,这里我们来探讨一下. 这里的例子用的都是提交客户端的用户名及密码,同时本节用到的StreamTools.readInputStre ...

  5. XMU 1605 nc与数列 【动态规划】

    1605: nc与数列 Time Limit: 2000 MS  Memory Limit: 64 MBSubmit: 84  Solved: 13[Submit][Status][Web Board ...

  6. 并不对劲的bzoj2820:p2257:YY的GCD

    题目大意 \(t\)(\(t\leq10^4\))组数据,给定\(n,m\)(\(n,m\leq10^6\))求 \[\sum_{x=1}^{n}\sum_{y=1}^{m}[gcd(x,y)=1]\ ...

  7. 并不对劲的字符串专题(三):Trie树

    据说这些并不对劲的内容是<信息学奥赛一本通提高篇>的配套练习. 并不会讲Trie树. 1.poj1056-> 模板题. 2.bzoj1212-> 设dp[i]表示T长度为i的前 ...

  8. SPOJ:Triple Sums(母函数+FFT)

    You're given a sequence s of N distinct integers.Consider all the possible sums of three integers fr ...

  9. 【转】Vuex 学习总结

    对于很多新手来说,只是阅读文档是不好消化,我的建议是看看 vuex 的实例,通过研究实例来学习vuex.这样就会好理解多了.如果还是不能理解,最好办法就是先把store 的四个属性:state, ge ...

  10. (转)Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound

    http://blog.xmaoseo.com/glyphicons-halflings-regular-woff-font-404-notfound/ 今天查看网站的源代码,发现有个glyphico ...