atitit.js 与c# java交互html5化的原理与总结.doc 1. 实现html5化界面的要解决的策略 2. sendNSCommand 3. 注册js 事件后台函数 4. 后台c# 5. 参考

atitit.js c# java交互html5化的原理与总结.doc

 

1实现html5化界面的要解决的策略1

1.1. Js交互1

1.2. 动态参数个数1

1.3. 事件监听2

2sendNSCommand2

2.1.1. --------nativeswing的实现2

3注册js 事件后台函数3

4后台c#3

5参考4

 

1.1. Js交互

FirefoxChrome也提供了external对象,例如,他们都默认的实现了opensearch的两个外部方法:
AddSearchProvider IsSearchProviderInstalled
Chrome下,可以在控制台输入window.external看到。
Firefox默认提供的外部方法稍稍多一些,也可以可以通过firebug看到。

 

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

 

 

1.2. 动态参数个数

Java的是obj[]   对象数组了。默认支持动态参数个数

C#的使用obj[]就不行兰..子能预保留

 

function sendNSCommand()

{

//arguments

var s=(arguments);

var argsArray = Array.prototype.slice.call(arguments);

 

window.external.sendNSCommand(argsArray[0],argsArray[1],argsArray[2],argsArray[4],argsArray[5],argsArray[6],argsArray[7]);

alert(window.external);

}

 

  //供JS调用

        public void sendNSCommand(Object message, Object message2, Object message3, Object message4, Object message5, Object message6, Object message7)

        {

          //  Object[] objs = (Object[])message;

            Console.WriteLine(message);

        }

1.3. 事件监听

本文提到的事件,可以分为三种类型,分别是表单提交、超链接跳转、JavaScript 直接调用 BrowserFunction。其中 JavaScript 调用 BrowserFunction 由于无需刷新页面,可以直接执行,因此无需对其进行特殊监听。然而,Web 上最为常见的表单提交和超链接跳转,都需要刷新页面,而刷新页面时,则无法调用 BrowserFunction。那么如何对这些事件进行监听成为文章的一大难点。

Browser 提供了一个事件监听机制,可以为 Browser 添加地址变更监听器,也就是 LocationListener,这个接口有两个方法 

 

 

2. sendNSCommand

 

 onclick="sendNSCommand('play','百度一下');"/

 

 

Window.external.对象就是我们后台的一个对象。。如果没有定义,就是null

 

 

2.0.1. --------nativeswing的实现

 sendNSCommand('play',video);

 

3. 注册js 事件后台函数

 

          ScriptEvent.ScriptEventDic.Add("play"delegate(IList<object> args) {

 

              MessageBox.Show((string)args[0]);

              return null;

          

          });

 

4. 后台c#

    //        修改webbrowser的属性使c#可以调用js方法: 

            webbrowser.ObjectForScripting = new ScriptEvent();

 

 

 

 

namespace ClassLibrary1.com.attilax.ui

{

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

    public class ScriptEvent

    {

 

        public static Dictionary<StringjavaEventHandler> ScriptEventDic = new Dictionary<stringjavaEventHandler>();

 

          public delegate Object javaEventHandler(IList<Object> args);//第一步:定义委托类型

 

        //供JS调用

        public void sendNSCommand(Object message, Object message2, Object message3, Object message4, Object message5, Object message6, Object message7)

        {

          //  Object[] objs = (Object[])message;

            Console.WriteLine(message);

 

            String meth =(String) message;

 

            IList<Object> li = new List<Object>();

            li.Add(message2);

            li.Add(message3); li.Add(message4); li.Add(message5); li.Add(message6); li.Add(message7);

            javaEventHandler hdl = ScriptEventDic[meth];

            hdl(li);

 

        }

    }

}

 

 

5. 参考

Winform控件WebBrowserJS脚本交互 冰 鱼 博客园

atitit.javascript调用java in swt attilax 总结 - attilax的专栏 博客频道 - CSDN.NET.html

 

WPFWebBrowser 里面使用JavaScript调用外部方法的决解方法 - Lonely Bandit - 博客园.html

[]JS调用WPF代码 执行了QueryInterface调用 请求提供COM可见的托管类 JavaScriptWinFrom_最黑de四季_新浪博客.html

Winform控件WebBrowserJS脚本交互 冰 鱼 博客园.html