Javascript 无法访问HTA工作进程内的ActiveXObject

Javascript 无法访问HTA工作进程内的ActiveXObject,javascript,excel,hta,activexobject,Javascript,Excel,Hta,Activexobject,我有一个IE11HTA,它从用户在运行时选择的各种Excel电子表格中提取数据。电子表格有几个类别,每个类别都有几个示例(日报、周报、月报等),因此用户必须在运行时从每个类别中选择一个电子表格。这是工作得很好,但它的速度比我想要的慢,因为它使用的是块,单线程逻辑,所以当HTA打开一个来自特定类别的电子表格并提取数据时,HTA处于搁置状态 我一直在尝试切换到一个多线程模型,使用web workers打开电子表格,这样HTA就不会被阻止,但我无法这样做,因为worker文件似乎无法访问ActiveX

我有一个IE11HTA,它从用户在运行时选择的各种Excel电子表格中提取数据。电子表格有几个类别,每个类别都有几个示例(日报、周报、月报等),因此用户必须在运行时从每个类别中选择一个电子表格。这是工作得很好,但它的速度比我想要的慢,因为它使用的是块,单线程逻辑,所以当HTA打开一个来自特定类别的电子表格并提取数据时,HTA处于搁置状态

我一直在尝试切换到一个多线程模型,使用web workers打开电子表格,这样HTA就不会被阻止,但我无法这样做,因为worker文件似乎无法访问ActiveXObject

例如,下面是一个经过修剪的主文件:

function main () {

    var output = document.getElementById ('output');
    var myWorker = new Worker ('worker.js');
    sendOut ('Calling worker.');
    myWorker.postMessage ('');

    myWorker.onmessage = function (m) {
        sendOut (m.data);
    }
}

function sendOut (m) {
    output.innerHTML += '<br /> ' + (m);
}

window.callWorker = main;
如果我注释掉worker.js文件的第一行,HTA将按预期运行,消息“Calling worker.”和“worker responding.”将出现在“output”元素中。但是,如果它没有注释,我会收到错误消息“Automation server无法创建对象”

由此看来,工作文件似乎无法访问ActiveXObject,但我找不到任何东西来证实或解释这一点

我还尝试在主文件中创建ActiveXObject并将其作为参数传递,如下所示:

var fso = new ActiveXObject ('Scripting.FileSystemObject')

onmessage = function (m) {
    postMessage ('Worker responding.');
}
function main () {

    var fso = new ActiveXObject ('Scripting.FileSystemObject')
    var output = document.getElementById ('output');
    var myWorker = new Worker ('worker1.js');
    sendOut ('Calling worker.');
    myWorker.postMessage (fso);

    myWorker.onmessage = function (m) {
        sendOut (m.data);
    }
}

function sendOut (m) {
    output.innerHTML += '<br /> ' + (m);
}

window.callWorker = main;
函数主(){
var fso=new ActiveXObject('Scripting.FileSystemObject')
var output=document.getElementById('output');
var myWorker=newworker('worker1.js');
发出(“呼叫工人”);
myWorker.postMessage(fso);
myWorker.onmessage=函数(m){
发送(m.data);
}
}
函数输出(m){
output.innerHTML+='
'+(m); } window.callWorker=main;

但现在我只得到了错误“DataCloneError”。我还没有找到任何关于这方面的参考资料,但看起来我试图做的是不可能的。有人能证实这一点吗,或者你知道解决办法吗?

不幸的是,网络工作者不允许使用HTA拥有的扩展权限。这就解释了这一点。谢谢