我們希望允許用戶下載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