100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java swing调用H5_atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97...

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

时间:2022-01-01 13:02:28

相关推荐

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

atitit.jsjavascript调用c#javaphp后台语言apihtml5交互的原理与总结p97

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

1.1.Js交互

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

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

转载请注明来源:/attilax

1.2.动态参数个数

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

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

functionsendNSCommand()

{

//arguments

vars=(arguments);

varargsArray=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

functionbtn_click()

{

try{

varmp=$("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(IListargs){

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

returnnull;

});

3.2.Java版

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

4.1.后台c#

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

webbrowser.ObjectForScripting=newScriptEvent();

.attilax.ui

{

[System.Visible(true)]

publicclassScriptEvent

{

publicstaticDictionaryScriptEventDic=newDictionary();

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

//供JS调用

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

{

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

Console.WriteLine(message);

Stringmeth=(String)message;

IListli=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

publicObjectfunction(Object[]arg0){

//logger.debug("ImageSelect");

Stringmeth=arg0[0].toString();

Listli=newArrayList();

for(inti=1;i

li.add(arg0[i]);

}

Objectobject=eventMap.get(meth);

//p93refinvokso..shouldprocessallinone.includecallback

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-generatedcatchblock

e.printStackTrace();

}

returnsuper.function(arg0);

}

4.3.Dwrc

vardwrC={};

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

{

try{

param.rdmStr=Math.random();

}catch(e){

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

}

//p93

if(callback==undefined)

{

varjson=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!="")//webenvi

$.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=="")//csenvi

{

varjson=urlParams2json(param);

varmeth=json.method;

if(json.method==null)//orundefinedundefinedgenggenullshyyeod.

meth=json.$method;

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

window.setTimeout(function(){

sendNSCommand(meth,param,callback);

},50);

}

}

5.参考

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

atitit.javascript调用javainswtattilax总结-attilax的专栏-博客频道-.html

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

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

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

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



本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。