IE10標准模式不支持HTC (Html Components) ,升級重寫Htc原有代碼之一: 自定義屬性


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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM