2008年2月21日 星期四

XHTML deprecated target attribute

在XHTML 1.0 Strict和XHTML 1.1中,a元素的target屬性被拿掉了,似乎是委員會的大老們覺得連結的開啟目標不該由文件本身提供,或是說使用者應該可以自己決定要怎麼打開它,所以現在是用rel和rev屬性來註明這個文件連結,但是不做任何具體影響。你可以利用rel="external"來註明這是個外部文件。
想要實現原本的功能,可以自己定義DTD或是用JavaScript。實作其實很簡單,核心如下:
var links = document.getElementsByTagName( 'a' );
for( var i = 0; links[i]; ++i ) {
    if( links[i].getAttribute( 'rel' ) == 'external' ) {
        links[i].addEventListener( 'click', function( e ) {
            e.preventDefault();    // IMPORTANT!
            window.open( this.getAttribute( 'href' ), '_blank' );
        }, false );
    }
}
Event的preventDefault是為了要阻止元素的預設行為,因為<a>在click之後一定會打開連結。
另外,我想這個JavaScript應該是不相容於IE的,不過沒關係,反正IE不支援XHTML,自然不用擔心這種XHTML才有的問題。
[Modified - 2008/02/26] Use W3C style.
[Modified - 2008/07/06] Improved loop terminate condition.

沒有留言:

張貼留言