HTA和'x-ua-compatible'元标记

4

添加到帖子Jun-19-2014

感谢Bond。由于您拥有IE9,我很感激您的测试。希望如果有人拥有IE 10,他们也会进行测试。在IE 11引擎下,为什么只能兼容到ie8是没有任何意义的。


我创建了这个微小的HTA,以便发布它,希望我能找出我缺少的内容。

我的系统是Win7 Pro 64位,带有IE 11。

当我将meta标记设置为:

<meta http-equiv="x-ua-compatible" content="ie=8">

HTA运行得很好。没有问题。但是当我将其更改为:

<meta http-equiv="x-ua-compatible" content="ie=9">

它的运行效果不太好。

现在...我知道IE 11和VBScript之间有一个大家庭争吵。VBScript被永久性地赶出了家门。IE 11拒绝再与它通信。所以我能理解为什么将其设置为content="ie=edge"不起作用。但是为什么将其设置为content="ie=9"也不起作用呢?

<!DOCTYPE html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=8">
<hta:application
applicationname="Hmmmmmm"
singleinstance="yes"
id="oHTA"
>
<title>Huh? What?</title>
<script language="VBScript">

Option Explicit
Dim objFSO,file

Sub Window_OnUnLoad
   Set objFSO=CreateObject("Scripting.FileSystemObject")
   Set file=objFSO.OpenTextFile("c:\temp\submit.txt",2,True)
   file.Write oHTA.document.getElementById("aa").value
   file.Close
   Set objFSO=Nothing
   Set file=Nothing
End Sub

Sub Window_OnLoad
   window.ResizeTo 240,130
End Sub

Function Form_OnSubmit()
   window.Close
   Form_OnSubmit=False
End Function

</script>
</head>
<body style="margin:30px;">
<form id="form" action="">
<input id="aa" type="text" size="10" value="test">
<input type="submit" value="Submit">
</form>
</body>
</html>

在 meta 标签中将其设置为 ie8 运行,一切正常...弹出窗口,调整大小,并在提交时写入文件...太棒了!

在 meta 标签中将其设置为 ie9 运行...弹出窗口,调整大小被忽略,并且写入文件也被忽略...就像所有的 VBScript 都被忽略了。

我缺少哪些信息呢?


VBScript在IE11中是可行的,您只需要处于内部网络或选择兼容性模式。 - phd443322
@phd443322 你还有什么其他方法可以执行HTA文件? - Teemu
博士- 我知道IE 11不支持运行VBScript。我已经说过了。我也知道要运行兼容性模式,这就是为什么我发布了这个问题的原因。使用content=ie8来运行这个简单的东西(mshta.exe)是没有问题的,但是当使用content=ie9时则有问题。我正在努力找出原因。 - Joe Weinpert
只是提供信息,我已经安装了IE9,并且它可以使用content=ie9。我希望它不能使用,这样我就可以帮助解决问题。 :) - Bond
@Cooper: "由于IE=8破坏了CSS,而IE=11或IE=Edge似乎破坏了VBS" ... 嗯,IE 10在某些方面也破坏了HTA:APPLICATION标签,例如应用程序图标不显示在应用程序标题栏的左侧...我明白为什么微软放弃了带有所有缺陷的IE。IE很快就会成为废弃软件...希望尽早...啊对了,尽早已经是昨天了...不方便的是,在Windows中,至今还没有真正的HTA替代品,除了可能是PowerShell和WinForms,但那些太复杂且更难处理。我宁愿在HTAs中使用JavaScript --> - willy wonka
但是即使使用JavaScript,也不能解决所有问题,只能解决一些问题。 - willy wonka
5个回答

8
看起来,IE的后续版本不支持HTA,正如其他答案中提到的一样。 解决问题的方法是:使您的HTA文件可导航(HTA属性),并且不指定任何元标记。在HTA文件中导航到具有标记的另一个文件。您导航到的文件将拥有HTA特权:
HTA文件:
<!doctype html>
 <html lang="en">
  <head>
   <HTA:APPLICATION 
    navigable="yes" />
  <script type="text/javascript">
  <!--
    document.location = 'htacontent.htm';
  //-->
  </script>
 </head>
 <body>
 </body>
</html>

htacontent.htm

<!doctype html>
<html lang="en">
  <head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
...

一个小问题:无法从htacontent.htm内部访问HTA特定属性。 - Zev Spitz
但由于几乎所有的设置都无法通过Javascript设置,所以我想这并不重要。 - Zev Spitz
这里的另一个问题是,如果你设置了 singleinstance="yes",它会重新聚焦原始的 HTML 应用程序,但它也会在后台打开一个包含文件的 IE 窗口。 - Herohtar

3

我也遇到了同样的问题。

解决方法是将Window改为小写!这尤其令人惊讶,因为通常VBScript不区分大小写!

因此,声明Sub window_onLoad而不是Sub Window_onLoad,以此类推...最终你的脚本应该能够正常工作。在Win7 Pro 64位和IE 11上进行了测试,与您的情况相似。

IE再次反击!


1
我可以确认,由于某种极其奇怪的原因,CEDTRSyntax都有所发现!顺便说一下,谢谢你们!我从来没有“猜到”过这一点(而且我以为我很了解VBS...)
简单介绍一下背景信息:我只是试图让我的HTA更漂亮 - 它已经完全功能(包括我将我的onload写成Window.OnLoad()),并且我添加了border-radius到我的CSS中,发现它不起作用。通过一些研究,我得知需要通过元声明添加额外的“兼容性”。
在这样做之后,我的整个HTA的VBS都崩溃了 - 我尝试了不同的“内容模式”,发现content="IE=8"可以让VBS再次工作,但回到了最初的状态,即忽略了border-radius的CSS。
这是我最终到达这里的时候 - 添加元数据似乎使VBS的解释更加严格,这也许就是为什么我的OnLoad函数现在无效的原因...(尽管有一个奇怪的注释是我的原始Window.OnLoad()无效,但window.OnLoad()有效...)仅仅改变“Window”上的W并保持相同的O用于“On”修复了问题,我认为“OnLoad”也需要更改为“onLoad”,但事实并非如此...
所以为了总结一下(防止我说太多),我将分享我的工作设置:

文档顶部:<!DOCTYPE html>
我在制作基于HTML5的网页时会放置这个,虽然在这里并不需要meta声明。

<head>标签内:<meta http-equiv="x-ua-compatible" content="IE=10" />
由于某种奇怪的原因,使用IE=9或IE=10可以获得最佳的整体结果。其他任何浏览器都会出现问题,例如IE=8会破坏CSS,IE=11或IE=Edge会破坏VBS。

<head><script>标签内:Sub window_OnLoad()
感谢这个页面上的善良人士,我意识到“Window”不能包含任何大写字母,尽管在点号后不再区分大小写,例如:window.ONLOAD()仍然有效且可用,但看起来很丑...

<head><style>标签内:
table, th, td {
  border: 1px solid #000000;
  border-collapse: collapse;
  border-radius: 8px;
}

我之所以添加这个内容,是因为我开始犹豫不决,但它可能对某些人有用 - 它只是将边框放在表格、表头和单元格上的CSS规则,然后如果一切都正常工作,边框将具有圆角 :D

无论如何 - 非常感谢大家 - 对StackOverflow表示敬意!也许有一天我会注册一个真正的账户 :P


0

IE9之后的版本不兼容HTA。所以如果你加上<meta http-equiv="x-ua-compatible" content="ie=9" />标签,它将不支持HTA中的<hta:application>、VBScript或者frames等功能。我也遇到过这个问题,我的解决方法是尽量绕过早期版本IE中不起作用的部分(例如,请参考我对this question的回答)。你在发布的HTA中似乎没有使用早期版本IE中不起作用的功能。如果你告诉我在IE7中不起作用的具体功能,我可能能给你提供一个解决方法。


0
正如ced在我之前所说,“解决方案是将Window改为小写”,“因此声明Sub window_onLoad而不是Sub Window_onLoad”。
我的问题出现在我在HTA中同时使用js和vbs时。但是,将我的情况与我的java“window.onload = function ()”子匹配后,一切都可以很好地协同工作。vb本身不区分大小写,但这可能是一些mshta.exe特定的行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接