欢迎光临散文网 会员登陆 & 注册

HTA

2022-02-25 08:20 作者:CSDN首席喷子  | 我要投稿

HTML应用(HTML Application,HTA)可以算是最早的WebView了,在Windows 2000到Windows 10中都可以使用,实际上就是一个启用本地权限的IE浏览器,可以借助ActiveX在.NET上开发扩展。编写一个静态HTML页面,然后将其扩展名修改为HTA,就变成了一个本地应用,这个页面拥有信任站点权限。但是相应地,有些限制跨域的Web开发手段就不能使用了。除此之外,还必须考虑当前使用的IE版本。

元信息标签

除了标准的HTML页面外,可以在<head>标签里面加入一个<HTA:AppLICATION>标签用于描述应用本身:

<head>

<HTA:AppLICATION

ICON="favicon.ico"

WINDOWSTATE="maximize">

</HTA:AppLICATION>

...

基于.NET的COM组件

对于IE 11版本来说,其必须使用.NET 4.0以上版本创建的COM组件。一个.NET 上的COM组件实例如下:

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;

}

}

}

编译,然后在管理员权限下使用C:\Windows\Microsoft.NET\Framework或Framework64下v4.0.x目录中的regasm.exe注册生成的DLL。

在HTA中调用COM组件

在页面中首先声明组件(使用实现类的CLSID):

<object CLASSID = "CLSID: 8A7DE620- 5D50- 441d- ACC2- 543CA8F2B664" id = " calculator "></object>

然后在Javascript中按HTML ID调用即可:

<script>

window.onload = function() {

var output = document.getElementById("output");

output.innerHTML = calculator.Add(1.0, 2.0).toString();

}

</script>

这种创建COM的方式只能创建单例。可以在单例的基础上使用工厂方法创建其它对象,注意如果使用数据对象,数据对象也必须根据接口传入参数:

interface IStudent {

void SetAge(int age);

...

}

 

class StudentImpl {

public void SetAge(int age) { ... }

...

}

换言之,对于Javascript而言只能看到COM的接口。如果不想按照COM的约定实现序列化,也可以借助JSON.NET等工具,直接传递JSON/XML字符串。

    

HTA的评论 (共 条)

分享到微博请遵守国家法律