我们希望允许用户下载hta文件并在其中运行我们的网络应用程序,并且某些网页检测到它们正在hta文件中运行,并提供额外的功能网络应用程序通常无权执行。javascript检测是否在hta中运行
如何简单地检测页面是否正在从hta文件容器中浏览?
我们希望允许用户下载hta文件并在其中运行我们的网络应用程序,并且某些网页检测到它们正在hta文件中运行,并提供额外的功能网络应用程序通常无权执行。javascript检测是否在hta中运行
如何简单地检测页面是否正在从hta文件容器中浏览?
我还没有测试,但不会只是看着window.location工作?
window.location.protocol=='file:'
将表示本地页面,但可能是本地 html页面或本地hta。
我在想每个上下文中的window.external
可能会有所不同。 所以使开放a.htm
和a.hta
包含:
<script>document.write(window.external)</script>
我们得到:
[object]
[xpconnect wrapped (nsISupports, nsISidebar, nsISidebarExternal, nsIClassInfo)]
[object Object]
null
因此,isHTA=(window.external==null)
将指示HTA上下文。
或者,isHTA=false;try{isHTA=(window.external==null)}catch(e){}
为了安全起见,因为我只测试IE,FF和Chrome的当前版本,谁知道其他浏览器就行了。
这个作品很棒,但是在safari窗口中,'window.external'也是空的! :( – CPlusSharp 2013-03-12 08:12:04
这可能适合该法案。验证属性可以被删除。
<hta:application id="myHTA"/>
<script>
alert("isHTA = " + isHTA("myHTA"));
function isHTA(htaId) {
var retval = false;
var hta = window[htaId];
if (!hta) {
// hta wasn't defined
} else if (hta.scopeName != "hta") {
// hta:application
} else if (hta.nodeName != "application") {
// hta:application
} else if (hta.tagName != "application") {
// hta:application
} else {
retval = true;
// attributes only a real hta would have
var attribKeys = [
"applicationName",
"border",
"borderStyle",
"caption",
"commandLine",
"contextMenu",
"icon",
"innerBorder",
"maximizeButton",
"minimizeButton",
"scroll",
"scrollFlat",
"selection",
"showInTaskBar",
"singleInstance",
"sysMenu",
"version",
"windowState"
];
for (var i=0;i<attribKeys.length;i++) {
var attribKey = attribKeys[i];
if (!hta.attribKey === undefined) {
retval = false;
break;
}
}
}
return retval;
}
</script>
这只会在你知道被使用的hta的id时才起作用 – TJR 2011-08-06 15:58:16
怎么样只是: -
var isHTA = (document.all && top.document && (top.document.getElementsByTagName('application')[0]));
HTA的是他们如何填充与< HTA的DOM独特:应用>标签。我用下面的抢HTA对象:
var hta;
var elements = document.getElementsByTagName("APPLICATION");
for(var i=0; i<elements.length; i+=1) {
if ("hta" === elements[i].scopeName.toString().toLowerCase()) {
hta = elements[i];
break;
}
}
// To test if the page is an HTA:
var isHta = (undefined !== hta);
在其他浏览器,你将不得不使用完整的标签名称来访问相同的对象:
// For Firefox/Chrome/IE
var elements = document.getElementsByTagName("HTA:APPLICATION");
检查HTA的commandLine
财产 - 应用程序对象是查看您是否作为真正的HTML应用程序运行的最佳方法,因为此属性仅在mshta.exe中可用。
您需要获取HTM-Application对象来检查此属性。如果你不知道对象的ID,你可以使用此代码:
// Check if running in a HTML-Application
var isHTA = false;
var htaApp = document.getElementsByTagName("HTA:APPLICATION")
if (!htaApp.length) {
htaApp = document.getElementsByTagName("APPLICATION");
}
if (htaApp.length == 1 && htaApp[0]) {
isHTA = typeof htaApp[0].commandLine !== "undefined";
}
号虽然应用程序是由一个HTA文件(其中包含登录屏幕)打开,登录后,用户在浏览web应用程序的正常html文件。 Window.location只是给用户当前的位置。 – rjmunro 2010-04-29 12:00:15