IE下のhrefのバグ問題

2231 ワード


<div id="test">
<a href="#"> test </a>
</div>
<div id="result"></div>

<script type="text/javascript">
(function(){
var test = document.getElementById('test');
alert(test.innerHTML);

var result = document.getElementById('result');
result.innerHTML = test.innerHTML;
alert(result.innerHTML)
})();
</script>
の結果、IE 6、IE 7ブラウザで第2のポップアップのreult.inners HTML中のA元素のhref値が絶対パスとなることがわかった。実は先にこれらの問題に遭遇しました。
  • 「get Attribute("HREF")is always absoute」
  • 《get Attribute href bug》は、上記の文章で処理案に言及した。つまり、IEの下でget Attribute(‘href’,2)の方法を使用する。Microsoftはこの方法に第二のパラメータを拡張し、0、1、2に設定すれば、属性の元の値を返します。スクリプトは、

    (function(){
    var test = document.getElementById('test');
    alert(test.innerHTML);
    var result = document.getElementById('result');
    result.innerHTML = test.innerHTML;
    if(/*@cc_on!@*/0 ) { //if ie
    var links1 = test.getElementsByTagName('a');
    var links2 = result.getElementsByTagName('a');
    for(var i = 0, len = links1.length; i < len; ++i ) {
    links2[i].href = links1[i].getAttribute('href', 2);
    }
    }
    alert(result.innerHTML);
    })();
    がこの問題を探している間にHedger Wangで発見された興味深いバグ問題を検索しました。IEで新たにhref属性値を設定すると、リンク文字にhttp://または@が含まれていると、innerHTMLは正しく表示されなくなり、設定されたhref属性が表示されます。解決方法(sHrefは設定するhrefの新しい値):

    sHref = 'http://www.hedgerwow.com';
    var isMSIE = /*@cc_on!@*/false;
    if( isMSIE ){
    sHref = ' ' + sHref; //add extra space before the new href
    };
    詳細:Internet Explorer mightreet Ancher's inners incorectly when a new「href」is assigned