atitit.js 與c# java交互html5化的原理與總結.doc
atitit.js 與c# java交互html5化的原理與總結.doc
1. 實現html5化界面的要解決的策略 1
1.1. Js交互 1
1.2. 動態參數個數 1
1.3. 事件監聽 2
2. sendNSCommand 2
2.1.1. --------nativeswing的實現 2
3. 註冊js 事件後臺函數 3
4. 後臺c# 3
5. 參考 4
1. 實現html5化界面的要解決的策略
1.1. Js交互
Firefox與Chrome也提供了external對象,比如,他們都默認的實現了opensearch的兩個外部方法:
AddSearchProvider IsSearchProviderInstalled
Chrome下,能夠在控制臺輸入window.external看到。
Firefox默認提供的外部方法稍稍多一些,也能夠能夠通過firebug看到。
作者:: 老哇的爪子 Attilax 艾龍。 EMAIL:[email protected]
轉載請註明來源: 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調用
public void sendNSCommand(Object message,
{
// 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<String, javaEventHandler> ScriptEventDic = new Dictionary<string, javaEventHandler>();
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控件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