在HTML 4.0 Strict和XHTML 1.0 STRICT裡不允許在<a>標籤裡使用target屬性,這是一件令網頁設計者懊惱的事.在過渡的規範裡還是允許使用的.但通過一定的方法,我們可以解決這一問題.
HTMl4.0規範裡拿掉了target屬性.但它添加了另外一個屬性:rel.這個屬性是用來指定包含鏈接的文檔和所鏈接文檔之間的關係的.規範裡定義了其屬性值(如:next,previous,chapter,section),在這些屬性里大多數是用來定義一個大文檔裡各個小部分之間的關係的.事實上.規範裡允許開發人員自由的使用非標準屬性值做特定的運用.
這裡,我們採用一個自訂值external用於rel屬性來標記一個連結,用來新開一個視窗.
不符合最新Web標準的連結代碼:
<a href=document.html target=_blank>external link</a>
運用rel屬性:
<a href=document.html rel=external>external link</a>
現在我們建立了一個符合Web標準的新開窗口的連結,我們還需要運用JavaScript是其實現新開窗口.腳本要實現的工作是當網頁加載時,找到文檔裡的所有那些我們定義為rel=external的超連結.
首先我們要判斷瀏覽器.
if (!document.getElementsByTagName) return;
getElementsByTagName是DOM1標準裡一個容易使用的方法,且它被現在的大多數瀏覽器所支援,因為一些舊的瀏覽器如Netscape 4和IE4不支援DOM1,所以我們必須透過判定這一方法是否存在來排除這些舊版的瀏覽器.
下一步,我們透過getElementsByTagName方法取得文件裡所有的<a>標籤:
var anchors = document.getElementsByTagName(a);
anchors被賦值為包含各個<a>標籤的陣列,現在我們必須遍歷各個<a>標籤並且修改它:
for (var i=0; i < anchors.length; i++) {
var anchor = anchors;
找到要實現新開視窗的<a>標籤
if (anchor.getAttribute(href) &&
anchor.getAttribute(rel) == external)
接下來.建立屬性值target並賦值_target:
anchor.target = _blank;
完整的程式碼:
------------------------
function externalLinks() {
if (!document.getElementsByTagName) return;
var anchors = document.getElementsByTagName(a);
for (var i=0; i<anchors.length; i++) {
var anchor = anchors;
if (anchor.getAttribute(href) &&
anchor.getAttribute(rel) == external)
anchor.target = _blank;
}
}
window.onload = externalLinks;