HTA
HTML應(yīng)用(HTML?Application,HTA)可以算是最早的WebView了,在Windows?2000到Windows?10中都可以使用,實(shí)際上就是一個(gè)啟用本地權(quán)限的IE瀏覽器,可以借助ActiveX在.NET上開發(fā)擴(kuò)展。編寫一個(gè)靜態(tài)HTML頁面,然后將其擴(kuò)展名修改為HTA,就變成了一個(gè)本地應(yīng)用,這個(gè)頁面擁有信任站點(diǎn)權(quán)限。但是相應(yīng)地,有些限制跨域的Web開發(fā)手段就不能使用了。除此之外,還必須考慮當(dāng)前使用的IE版本。
元信息標(biāo)簽
除了標(biāo)準(zhǔn)的HTML頁面外,可以在<head>標(biāo)簽里面加入一個(gè)<HTA:AppLICATION>標(biāo)簽用于描述應(yīng)用本身:
<head>
<HTA:AppLICATION
ICON="favicon.ico"
WINDOWSTATE="maximize">
</HTA:AppLICATION>
...
基于.NET的COM組件
對(duì)于IE?11版本來說,其必須使用.NET?4.0以上版本創(chuàng)建的COM組件。一個(gè).NET?上的COM組件實(shí)例如下:
using?System;
using?System.Runtime.InteropServices;
namespace?Exercise.Background
{
[ComVisible(true)]
[Guid("54AC547E-32D6-4540-9A2A-B5B71E2A313F")]
public?interface?ICalculator
{
????[ComVisible(true)]
????double?Add(double?val1,?double?val2);
}
[ComVisible(true)]
[Guid("8A7DE620-5D50-441D-ACC2-543CA8F2B664")]
public?class?CalculatorImpl:ICalculator
{
[ComVisible(true)]
public?double?Add(double?val1,?double?val2)
{
return?val1?+?val2;
}
}
}
編譯,然后在管理員權(quán)限下使用C:\Windows\Microsoft.NET\Framework或Framework64下v4.0.x目錄中的regasm.exe注冊(cè)生成的DLL。
在HTA中調(diào)用COM組件
在頁面中首先聲明組件(使用實(shí)現(xiàn)類的CLSID):
<object?CLASSID?=?"CLSID:?8A7DE620-?5D50-?441d-?ACC2-?543CA8F2B664"?id?=?"?calculator?"></object>
然后在Javascript中按HTML ID調(diào)用即可:
<script>
window.onload?=?function()?{
var?output?=?document.getElementById("output");
output.innerHTML?=?calculator.Add(1.0,?2.0).toString();
}
</script>
這種創(chuàng)建COM的方式只能創(chuàng)建單例??梢栽趩卫幕A(chǔ)上使用工廠方法創(chuàng)建其它對(duì)象,注意如果使用數(shù)據(jù)對(duì)象,數(shù)據(jù)對(duì)象也必須根據(jù)接口傳入?yún)?shù):
interface?IStudent?{
void?SetAge(int?age);
...
}
?
class?StudentImpl?{
public?void?SetAge(int?age) { ... }
...
}
換言之,對(duì)于Javascript而言只能看到COM的接口。如果不想按照COM的約定實(shí)現(xiàn)序列化,也可以借助JSON.NET等工具,直接傳遞JSON/XML字符串。
????