atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97

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

1.1.Js交互

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

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

转载请注明来源: http://blog.csdn.net/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调用

publicvoidsendNSCommand(Objectmessage,Objectmessage2,Objectmessage3,Objectmessage4,Objectmessage5,Objectmessage6,Objectmessage7)

{

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

Console.WriteLine(message);

}

1.3.事件监听

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

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

1.4.异常转换

如果桌面模型下,一般可以自动异常转换。

Web模型下,一般需要异常序列化传递,然后本地转换。

2.dwrC.exec

2.1.支持 ajax 与browExt模式  支持反射,直接继承调用后台api

function btn_click()

{

try{

var mp=$("form").serialize();

mp= "&$method=com.attilax.license.LicenseX.calcSn&$exSerialFmt=json..&$callback=callback&machi_code="+$("#machi_code").val();

dwrC.exec(mp);

}catch(e)

{

showErr(e);}

}

2.2.sendNSCommand(nativeswing的实现)

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

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

2.3.--------nativeswing的实现

sendNSCommand('play',video);

2.4.C# swt都是自定义

3.(不通过反射)自定义方法的时候注册js事件后台函数

3.1.C#版本

ScriptEvent.ScriptEventDic.Add("play",delegate(IList args) {

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

returnnull;

});

3.2.Java版

4.------------code

4.1.后台c#

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

webbrowser.ObjectForScripting =newScriptEvent();

namespaceClassLibrary1.com.attilax.ui

{

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

publicclassScriptEvent

{

publicstaticDictionary ScriptEventDic =newDictionary();

publicdelegateObjectjavaEventHandler(IList args);//第一步:定义委托类型

//供JS调用

publicvoidsendNSCommand(Objectmessage,Objectmessage2,Objectmessage3,Objectmessage4,Objectmessage5,Objectmessage6,Objectmessage7)

{

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

Console.WriteLine(message);

Stringmeth =(String) message;

IList li =newList();

li.Add(message2);

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

javaEventHandlerhdl = ScriptEventDic[meth];

hdl(li);

}

}

}

4.2.通过反射调用java

@Override

publicObject function(Object[]arg0) {

// logger.debug("ImageSelect");

Stringmeth=arg0[0].toString();

Listli=newArrayList();

for(inti= 1;i

li.add(arg0[i]);

}

Objectobject=eventMap.get(meth);

// p93refinvokso ..should process all in one .include callback

if(object==null) {

Stringclassname= refx.getClassName(meth);

Stringmeth_name= refx.getMethodName(meth);

Objecto;

try{

o= ConstructorUtils.invokeConstructor(

Class.forName(classname),null);

Object[]oa= getParams(li);

Objectrzt= MethodUtils.invokeMethod(o,meth_name,oa);

StringcallbackHandle= (String)li.get(li.size() - 1);

if(rztinstanceofString) {// simpleobjstr,num

Stringjs2=callbackHandle+"('"+rzt+"');";

booleanr=this.brow.execute(js2);

System.out.println(r);

}else{//plexobj

Stringjs2=callbackHandle+"('"+ core.toJsonStrO88(rzt)

+"');";

this.brow.execute(js2);

}

returnrzt;

}catch(Exceptione) {

Stringparams_urlparams_fmt= (String)li.get(0);

Mapmp=newParamX().urlParams2Map(params_urlparams_fmt);

StringexSerialFmt= (String)mp.get("$exSerialFmt");

if(exSerialFmt.equals("json"))

returncore.toJsonStrO88(e);

throwExceptionUtil.convertToRuntimeEx4throwEx(e);

}

}

//def

Closureevet= (Closure)object;

try{

returnevet.execute(li);

}catch(Exceptione) {

//TODOAuto-generated catch block

e.printStackTrace();

}

returnsuper.function(arg0);

}

4.3.Dwrc

var dwrC={};

dwrC.exec=function(param,callback,approot)

{

try{

param.rdmStr=Math.random();

}catch(e){

param=param+"&rdmStr2="+Math.random();

}

//p93

if(callback==undefined)

{

var json=urlParams2json(param);

callback=json.$callback;

}

//

if(isExitsFunction("submit_befor_check"))

submit_befor_check();

//$iocx="aa";

$iocx_iner="";

if(isExitsVariable("$iocx"))

$iocx_iner=$iocx;

//jQuery.get("dwr.php?param="+param, [data], [callback])

if(window.location.host!="")  //web envi

$.ajax(

{

type: "get",

url: approot+"/com.attilax/dwr.php?iocx="+$iocx_iner,

data:param,

dataType: "text",

success: function(data) {

//  $("#divShow").html(data);

data=$.trim(data);

callback(data);

}

});

//-------------------

if(window.location.host=="")  //cs envi

{

var json=urlParams2json(param);

var meth=json.method;

if(json.method==null)  //or  undefined    undefined gengge null sh yyeod .

meth=json.$method;

//(meth,param1,,param2,param3,callback);

window.setTimeout(function(){

sendNSCommand(meth,param,callback);

},50);

}

}

5.参考

Winform控件WebBrowser与JS脚本交互-冰 鱼-博客园

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

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

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

Winform控件WebBrowser与JS脚本交互-冰 鱼-博客园.html

atitit.js 与c# java交互html5化的原理与总结.doc - attilax的专栏-博客频道- CSDN.NET.htm



java swing调用H5_atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97...相关推荐

  1. atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97

    atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参 ...

  2. Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle...

    Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle 1. 主键1 2. uniq  index2 3.  ...

  3. 阿提拉公司 java_Atitit  文件上传  架构设计 实现机制 解决方案  实践java php c#.net js javascript  c++ python...

    Atitit 文件上传 架构设计 实现机制 解决方案 实践 java php c#.net js javascript c++ python 1 . 上传的几点要求 2 1 .1. 本地预览 2 1 ...

  4. JS(Javascript)调用Android原生方法三步走

    三步走: 1.webview 一定要设置这三个方法 webSetting.setJavaScriptEnabled(true); webSetting.setJavaScriptCanOpenWind ...

  5. js rsa java解密_RSA使用js加密,使用java解密

    RSA算法使用javascript加密,使用java解密,提供完整代码及例子下载. javascript加密介绍参见另一篇:javascript使用RSA加密提交数据.本篇的例子使用的js是上一篇中提 ...

  6. java swing列表数据加监听,【Java Swing公开课|Java监听列表项选择事件怎么用,看完这篇文章你一定就会了】- 环球网校...

    [摘要]作为一门面向对象编程语言,Java吸收了C++语言的优点,也展现了其强大的一面,我们能在各个地方看到其功能强大和简单易用的两个特征,当然,也吸引了很多程序员的注意力,所以就有人想了解Java的 ...

  7. java swing美化_用美化包设置Java Swing LookAndFeel

    介绍:Java Swing的开发中UI的设置和润色比较复杂,简单的方法就是设置LookAndFeel. 1.   java自带的 1.Java Swing自带的LookAndFeel可以根据系统名称来 ...

  8. java swing 组织机构_课内资源 - 基于Java Swing的小型社团成员管理系统

    一.需求分析 1.1 个人信息 学号.姓名.性别.年级.系别.专业.出生日期.联系方式.个性签名.地址.照片. 1.2 基本功能要求管理员信息管理 登录.注销功能 修改密码功能 部落成员信息管理 添加 ...

  9. js如何调用php函数,JavaScript 调用PHP

    JS中同步调用PHP函数 1.在JS中创建一个函数,该函数可以发送Http请求到服务端,并受到返回消息,可以使用get或者是post function HttpGet(theUrl) { var xm ...

最新文章

  1. Guice系列之用户指南(十)
  2. mysql常用命令集合 及附图操作
  3. 【Python面试】 说说Python中有几种数据类型?​
  4. 黄斑区隆起原因诊断过程+黄斑反复水肿问题
  5. 【error】深度优先搜索TypeError: unhashable type: ‘list‘
  6. MFC如何使控件大小随着对话框大小自动调整
  7. spring mvc学习(45):springMVC的三大组件
  8. java bitset_Java BitSet nextClearBit()方法与示例
  9. HTML 5 Web 存储-localStorage
  10. 剑指Offer——重建二叉树
  11. stc流水灯c语言程序,求51单片机流水灯跑马灯程序设计 (STC89C52RC)??
  12. 直播声音代码html,如何实现在直播中播放音频文件
  13. Python图像变换及手绘效果
  14. 深度学习----Tensorflow再命名实体上常用的函数
  15. 人生感悟-人生需学会放下
  16. 软件测试常用工具有哪些
  17. 关于瀚高数据库的适配
  18. python笔记本好_如何使用 Python 分析笔记本电脑上的 100 GB 数据
  19. python分析数据的相关性_使用Python进行相关性分析
  20. 大数据清洗与预算第三章

热门文章

  1. 信用评分python_信用评分卡(python)
  2. python代理池_用Python搭建一个简单的代理池
  3. vscode里面如何配置库_VSCode中C/C++库文件的配置
  4. 初一七年级计算机信息全册教案,新川教版七年级信息技术全册教案(全册)
  5. 更新pcb封装导入_PCB设计│网表导入的雷区,你还在踩?
  6. code blocks代码性能分析_记一次Python Web接口优化,性能提升25倍!
  7. 伪分布式hbase数据迁移汇总
  8. Tensorflow 梯度下降实例
  9. jquery-data的三种用法
  10. win32汇编寄存器汇总