不過在w3c的驗證標準中,target="_blank" 這個屬性是不被驗證通過的
原因是那些磚家認為不經過使用者同意就開啟一個新視窗,這樣的行為屬於強X了使用者的思想。是不友好,不禮貌的行為。所以標準提出的是用 rel="external"來聲明,配合一個external.js來實現。在這裡貼一下這個js檔案的代碼,需要的朋友拿走。
| 代碼如下 |
複製代碼 |
function externallinks() { if (!document.getElementsByTagName) return; var anchors = document.getElementsByTagName("a"); for (var i=0; i<anchors.length; i++) { var anchor = anchors[i]; if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external nofollow") anchor.target = "_blank"; } } window.onload = externallinks; |
不過上面這些不是本文的主要內容,這裡我主要介紹一種新方法:
通過js實現使用者自主選擇是否在新視窗開啟連結:此代碼可以記錄cookie,儲存365天。即使用者選擇一次,在不刪除cookie的情況下會儲存此設定一定時間。
下面看代碼即示範:(建議另存新檔html檔案運行,這樣方便查看cookie情況)
| 代碼如下 |
複製代碼 |
<html> <head> <script type="text/javascript"> window.onload=checkCookie; function getCookie(c_name) { if (document.cookie.length>0) { c_start=document.cookie.indexOf(c_name + "=") if (c_start!=-1) { c_start=c_start + c_name.length+1 c_end=document.cookie.indexOf(";",c_start) if (c_end==-1) c_end=document.cookie.length return unescape(document.cookie.substring(c_start,c_end)) } } return "" } function setCookie(c_name,value,expiredays) { var exdate=new Date() exdate.setDate(exdate.getDate()+expiredays) document.cookie=c_name+ "=" +escape(value)+ ((expiredays==null) ? "" : "; expires="+exdate.toGMTString()) } function checkCookie() { target=getCookie('target') if (target!=null && target=="true") { document.getElementById("checkit").checked=true; openStyle("_blank"); } else { if (target!=null && target=="false") {document.getElementById("checkit").checked=false; openStyle("");} } } function openStyle(choice){ var links = document.getElementsByTagName("a"); for(var i=0;i<links.length;i++){ links[i].target = choice; } } function setCheck(obj){ if(obj.checked) { openStyle("_blank"); setCookie('target','true',365); } else{ openStyle(""); setCookie('target','false',365); } } </script> </head> <body> <input type="checkbox" id="checkit" onclick="setCheck(this);" />選擇是否在新視窗開啟<br/> <a href="http://www.111cn.net" >baidu</a><br/> <a href="http://www.111cn.net" >安卓主題</a> </body> </html> |
進階進階部分:可自由設定站內站外連結是否新視窗開啟如果一些朋友需要設定站內的連結就在本視窗開啟,站外的連結全部是新視窗,怎麼辦呢?
首先添加代碼:
| 代碼如下 |
複製代碼 |
var index=location.hostname; //擷取當前主域 |
然後修改openStyle函數為:
| 代碼如下 |
複製代碼 |
function openStyle(choice){ var links = document.getElementsByTagName("a"); for(var i=0;i<links.length;i++){ if(links[i].href.indexOf(index)==-1 && links[i].href.indexOf('javascript') == -1){ links[i].target = choice; } } }
|
ok,到此結束。這樣就能判斷本站連結就在當前視窗開啟,站外連結就在新視窗開啟了。