我有一个IE 11 HTA,用于从运行时用户选择的各种Excel电子表格中提取数据。有几类电子表格,以及每个类别的几个示例(每日,每周,每月报告等),因此用户必须在运行时从每个类别中选择一个电子表格。这很好用,但它比我想要的慢,因为它使用阻塞的单线程逻辑,因此当HTA从特定类别打开电子表格并提取数据时,HTA是等等。
我一直在尝试使用网络工作人员切换到多线程模型来完成打开电子表格的工作,这样就不会阻止HTA,但我还是无法做到这一点。工作文件似乎无法访问ActiveXObjects。
例如,这是一个精简的主文件:
[1] TRUE FALSE FALSE TRUE TRUE
虽然worker.js文件如下所示:
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按预期运行并且消息“呼叫工作人员”。&#39;并且&#39;工人回应。&#39;出现在&#39;输出&#39;元件。但是,如果它未被注释,我会收到错误消息&#39;自动化服务器无法创建对象&#39;。
从这看起来,工作文件似乎无法访问ActiveXObjects,但我找不到任何要确认或解释的内容。
我还尝试在主文件中创建ActiveXObjects并将它们作为参数传递:
var fso = new ActiveXObject ('Scripting.FileSystemObject')
onmessage = function (m) {
postMessage ('Worker responding.');
}
但现在我得到了错误&#34; DataCloneError&#34;。我在这方面找不到任何参考资料,但看起来我试图做的简单事情是不可能的。有人能够证实这一点,或者你知道解决方法吗?