2012年1月12日 星期四

[Bookmarklet] 獲取頁面上的連結

# 2012/1/16更新
發現之前的程式碼有錯,已更新程式碼與連結。

# 2012/1/13更新
因為做成可拖動發現有些bug,後來決定採用類似PicPick擷圖視窗一樣,固定在左上或右下角。當點擊連結時會自動全選,複製時直接按Ctrl+C就好了。

雖說感覺快學測了(不是只剩五天嗎),不過還是很宅的在打混。

一開始會想寫這個小工具,是因為常常在碰到一些分享檔案(?)的文章,都會好心的幫你把免空網址做成連結(anchor)丟在論壇上,殊不知使用Opera的人,就無法複製到真實的網頁網址,結果免空下載器(JDownloadr、FreeRapid)就無法從剪貼簿獲取連結。每次要下載時都要一個一個右鍵,如果遇到很多分割檔或集數很多(?)就會按的很辛苦。

在此先保證IE無法使用(說起來...有IE使用者會裝Bookmarklet嗎...)

Get Links!

將上面的連結加入書籤就可以了。點擊後會看到左上角出現一個文字方塊,可拖動。接著點擊要獲取的連結(Ex: Google,成功的話就會發現連結網址出現在文字方塊裡了。如果失敗,表示你點的連結並不是真的連結,而是網站用JavaScript控制,用轉址或跳出式視窗做出來的東西;或者你點擊的連結在iframe中。

以下給Code︰

(function(){  
var d=document.getElementById("linkingbox"); 
if(d&&d.style.display!="none"){ 
    d.style.display="none"; 
    return; 
}else if(!d){ 
    var d=document.createElement("textarea"); 
    d.setAttribute("id","linkingbox"); 
    d.style.border="3px solid black"; 
    d.style.padding="6px"; 
    d.style.position="fixed"; 
    d.style.top="4px"; 
    d.style.left="4px"; 
    d.style.height="300px"; 
    d.style.width="180px"; 
    d.style.backgroundColor="white"; 
    d.style.zIndex="2147483647"; 
    d.onmouseover=function(e){ 
        if(this.style.right!="4px"){ 
            this.style.top="auto"; 
            this.style.left="auto"; 
            this.style.right="4px"; 
            this.style.bottom="4px"; 
        }else{ 
            this.style.top="4px"; 
            this.style.left="4px"; 
            this.style.right="auto"; 
            this.style.bottom="auto"; 
        } 
    }; 
    document.getElementsByTagName("body")[0].appendChild(d); 
    document.addEventListener("click",function(e){ 
        var d=document.getElementById("linkingbox"); 
        if(d.style.display=="none")return; 
        var t=e.target; 
        while(t&&t.nodeName!="A")t=t.parentNode; 
        if(t){ 
            d.appendChild(document.createTextNode(t.href+"\n")); 
            e.preventDefault(); 
            d.focus(); 
            d.select(); 
        } 
        return false; 
    },false); 
}else{ 
    d.style.display="block"; 
    while(d.childNodes.length){ 
        d.removeChild(d.childNodes[0]); 
    } 

})()

沒有留言:

張貼留言