IE10標准模式不支持Htc(Html Components)已經是千真萬確的事情了,如果瀏覽器升級到了IE10,那么原有的htc代碼要怎么辦呢?道路有二:
1.將htm頁面設置為IE6, IE7, IE8等完全兼容htc的文檔模式,這樣在IE10下還是能跑htc的,IE9對htc已經有所拋棄了,所以不推薦設置為IE9的文檔模式,具體見下文:
IE6-IE9兼容性問題列表及解決辦法_補充之四:HTC (Html Components) 功能逐漸被IE拋棄
2.如果必須要將頁面設置為IE10標准模式,那么,沒得選擇,就只能升級或重寫htc代碼了。
下文就是道路二的一個小Demo:
首先,先建好一個ie10_field_htc.htc, 里面就放一個自定義屬性VisibilityOrHidden和它的get, put方法,這兩個方法里本來可以寫很多邏輯的,但簡單起見,就各寫了一句,代碼如下:
<public:component> <PUBLIC:PROPERTY NAME="VisibilityOrHidden" GET="getVisibilityOrHidden" PUT="putVisibilityOrHidden" /> <SCRIPT LANGUAGE="JScript"> function putVisibilityOrHidden(vValue) { element.style.visibility = vValue } function getVisibilityOrHidden() { return element.style.visibility } </SCRIPT> </public:component>
然后,再來一個簡單的ie10_field_htc.css文件,代碼如下:
INPUT { behavior: url(ie10_field_htc.htc); }
最后,就是ie10_field_htc.htm文件了,這里寫的IE=9,為的是在IE10下能正常跑這個功能:
<html> <head> <title id="1">asdf</title> <meta http-equiv="X-UA-Compatible" content="IE=9" /> <LINK type="Text/css" rel="stylesheet" href="ie10_field_htc.css"> </LINK> <script type="text/javascript"> function loaded() { document.getElementById("tid").VisibilityOrHidden = "hidden"; } </script> </head> <body onload="loaded()"> <div> <input type="text" id="tid" value="中國美國" /> </div> </body> </html>
有了這三個文件,一運行,就可以看到,因為我們設置了自定義的屬性VisibilityOrHidden,所以頁面里的input框不顯示了,到現在為止,一切正常。
這時,將IE=9改為IE=10,然后再打開IE10瀏覽器一看,不出我們意料,這個頁面果然就不行了,下面我們就開始升級重寫htc里的代碼。
這里用到了Js中的Object.defineProperty了,推薦資料:Object.defineProperty 函數 (JavaScript), http://technet.microsoft.com/zh-cn/sysinternals/dd548687
總之,用了它,就可以給任何一個javascript對象甚至dom元素添加擴展屬性了。
廢話不講了,直接上代碼,再創建一個ie10_field_htc.js文件,代碼如下:
var Method_VisibilityOrHidden = { get: function () { return this.style.visibility }, set: function (val) { this.style.visibility = val } } //input if (!HTMLInputElement.prototype.hasOwnProperty("VisibilityOrHidden")) { Object.defineProperty(HTMLInputElement.prototype, "VisibilityOrHidden", Method_VisibilityOrHidden); }
當然,除Input外,象TextArea,Select這些元素如果也需要這個自定義屬性,那么,就再添加愛一個HTMLTextAreaElement和HTMLSelectElement就好了,其他元素以此類推即可。
然后,將剛才的htm修改下,去掉引用htc的css,換成這個js,修改后代碼如下:
<html> <head> <title id="1">asdf</title> <meta http-equiv="X-UA-Compatible" content="IE=10" /> <script src="ie10_field_htc.js" type="text/javascript"></script> <script type="text/javascript"> function loaded() { document.getElementById("tid").VisibilityOrHidden = "hidden"; } </script> </head> <body onload="loaded()"> <div> <input type="text" id="tid" value="中國美國" /> </div> </body> </html>
然后再打開IE10,運行這個頁面,哈哈,Bingo!
這篇到此結束,The End.