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

时间:2014-06-19 00:27:46

标签: vbscript meta-tags internet-explorer-11 hta

已添加至2014年6月19日之后

感谢邦德。既然你有IE9,我感谢你的测试。希望如果那里的人有IE 10,他们也会测试它。没有任何意义,为什么在IE 11引擎下你只能运行兼容性ie8。


我创建了这个微小的,非常小的HTA,以便发布它,希望我能找到我所缺少的东西。

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

当我将元标记设置为:

<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 =&#34; ie = edge&#34;不行。但是为什么在将其设置为content =&#34; ie = 9&#34;?

时它不起作用
<!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>

在元标记中设置ie8运行它工作正常...窗口弹出,调整大小,并在提交时写入文件... glory-be!

在弹出的元标记...窗口中设置为ie9运行它,忽略调整大小,忽略写入文件...就好像忽略了所有VBScript一样。

我错过了哪些信息?

5 个答案:

答案 0 :(得分:6)

看起来IE的后续版本不支持其他答案中提到的HTA。 您的问题的一个解决方案是:使您的HTA文件可导航(HTA属性navigable="yes")并且不指定任何x-ua-compatible元标记。在HTA文件中,导航到另一个具有x-ua-compatible标记的文件。您导航的文件将具有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" />
...

答案 1 :(得分:2)

我刚遇到同样的问题。

解决方案是将Window放在小写字母中!它特别令人惊讶,因为通常VBScript不区分大小写!

所以声明Sub window_onLoad而不是Sub Window_onLoad,依此类推......最后你的脚本应该有效。 使用IE 11在Win7 Pro 64bit上进行测试,与您的一样。

IE反击!

答案 2 :(得分:0)

IE9以后的版本不能与HTA兼容。因此,如果您放置<meta http-equiv="x-ua-compatible" content="ie=9" />标记,它将不支持HTA的内容,如<hta:application>,VBScript或框架。我也遇到了这个问题,而我所做的就是尝试解决在早期版本的IE中无法解决的问题(例如,请参阅我对this question的回答)。您似乎没有使用在您发布的HTA中在早期版本的IE中不起作用的内容。如果你确切地告诉我你在IE7中使用哪些不起作用,我可能会给你一个解决方法。

答案 3 :(得分:0)

正如ced在我之前所说的那样,“解决方案是将Window置于小写”,“因此声明Sub window_onLoad而不是Sub Window_onLoad”。

当我在HTA中同时使用js和vbs时,我的问题出现了。但在将我的案例与我的java“window.onload = function()”子句匹配后,一切都很好。 vb本身不区分大小写,但这可能是某些特定于mshta.exe的行为。

答案 4 :(得分:0)

我可以确认,(出于某些极端奇怪的原因) CED TRSyntax 都已启用!
-谢谢大家! -我永远不会'猜'这个(我以为我很了解VBS ...)

仅提供一些简短的背景信息:我只是想让我的HTA更漂亮-它已经完全起作用了(这包括我的上载实际上写为Window.OnLoad()并添加了{{1 }}到我的CSS上,但发现它不起作用-一些研究表明,我需要通过border-radius

的元声明添加额外的“兼容性”

这样做之后,我的整个HTA的VBS立即崩溃了–我尝试了不同的“内容模式”,并发现<meta http-equiv="x-ua-compatible" content="IE=Edge" />允许VBS再次工作,但是“回到正题”,因为它忽略了{{ 1}}。

这是我终于到这里的时候-似乎添加meta使得对VBS的解释更加严格,这也许就是为什么我的OnLoad函数现在无效的原因……(尽管奇怪的是我原来的{{1 }}无效,但content="IE=8"有效...)只需更改“窗口”上的 W 并保持与“打开”相同的 O 即可解决此问题,我认为“ OnLoad”也需要更改为“ onLoad”,但事实并非如此...

因此,总结一下(以防止我摇摇晃晃),我将分享我的工作设置:

文档顶部:border-radius
在制作基于HTML5的网页时,我将其作为“良好做法”使用,尽管meta此处实际上并不需要声明。

Window.OnLoad()中:window.OnLoad()
出于某些奇怪的原因,我在IE = 9或IE = 10时获得了最佳的总体效果。其他任何一个似乎都会引起问题,例如IE = 8破坏CSS,IE = 11或IE = Edge似乎破坏了VBS

<!DOCTYPE html>中:<head>
由于这个页面上的友善,我意识到“窗口”不能包含任何大写字母,尽管在点号后面;情况不再重要,例如:<meta http-equiv="x-ua-compatible" content="IE=10" />仍然有效且有效,但是看起来很丑...

<head><script>中:

Sub window_OnLoad()

我刚刚添加了它是因为我开始胡扯,但是对某人可能有用-只是CSS规则在Tables,Table Headers&Cells上加了一个边框,然后,如果其他所有方法都正常工作边界将带有圆角:D

无论如何-非常感谢大家-非常感谢StackOverflow! -也许有一天我会注册并创建一个真实帐户:P