日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2023/12/15 C# 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java swing调用H5_atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。