在設計網頁時,有時我們不想讓 user 取得頁面上的資訊,因此就必須讓 user 在頁面上的任何點擊都無法發生作用,這行為就是所謂的鎖網頁,所謂有法就有破,雖然要破鎖網頁很容易,但對門外漢而言多少還是有阻擋的作用,所以就稍微學一下吧。
 鎖網頁的第一步就是要先使用 window.open() 開啟一個無 Tool bar 與 Menu bar 的視窗,這算是基本功,此處就不多說了。接下來再使用 javascript 來鎖掉滑鼠右鍵功能鍵(F5、退格刪除(Backspace) 鍵) 與組合鍵(Ctrl + N、Ctrl + R、Shift + F10、Shift + 滑鼠左鍵、Alt + 左方向鍵、Alt + 右方向鍵、Alt + F4) 即可。以下將開始各別說明。
  •  鎖滑鼠右鍵
    // 擋滑鼠右鍵選單事件
    document.oncontextmenu = function() { return false;};
    // 擋滑鼠中鍵與右鍵事件
    document.onmousedown  = function(theEvent) {
            if (theEvent != null) {
                    event = theEvent;
            }
            if (event.type == "mousedown") {
                    if (event.button == 2 || event.button == 3) {
                            return false;
                    }
            }
    }
     
  • 擋功能鍵
    F1 ~ F12 功能鍵的 keyCode 為 112 ~ 123。
    擋功能鍵的重點比較麻煩的是在 IE 中要做額外處理,首先要把 event 物件的 keyCode 值設為 0,否則光是 return false 是沒有作用的;另外就是 F1 鈕會觸發 window.onhelp 事件,因此要特別針對此做設定。
     
    // 擋 IE 按下 F1 鈕時會觸發的 onhelp 事件
    window.onhelp = function(){return false;}
    // 擋住 F1 ~ F12 鈕的事件。
    document.onkeydown = function(theEvent) {
            if (theEvent != null) {
                    event = theEvent;
            }
            if (event.keyCode >= 112 && event.keyCode <= 123 || event.keyCode == 8) {
                    try {
                            // Firefox 會丟 Exception,所以用 try-cache 擋住
                            event.keyCode = 0; 
                    } catch(e){}
                    return false;
            }
    }
     
  • 擋組合鍵(瀏覽器快速鍵)
    所謂組合鍵就是 Ctrl + XXX 或是 Alt + XXX 或是 Shift + XXX,重點在於只要將 Ctrl、Alt 或 Shift 擋下,那組合鍵就破功了。由於 Shift + XXX 不會是瀏覽器的快速鍵,所以不鎖 Shift。
     
    document.onkeydown = function(theEvent ) {
            if (theEvent != null) {
                    event = theEvent;
            }
            if (event.altKey || event.ctrlKey) {
                    return false;
            }
    }
鎖網頁的重點大致上如上所述,以下提供一個綜合的寫法,並可在 Firefox 與 IE 上運行無礙。
 
lock = function(theEvent) {
        if (theEvent != null) {
                event = theEvent;
        }

        // 擋滑鼠右鍵選單事件
        if (event.type == "contextmenu") {
            return false;
        // 擋滑鼠中鍵與右鍵事件
        } else if (event.type == "mousedown") {
                if (event.button == 2 || event.button == 3) {
                        return false;
                }
        // 擋 IE 按下 F1 鈕時會觸發的 onhelp 事件
        } else if (event.type == "help") {
            return false;
        // 擋特定按鍵
        } else if (event.type == "keydown") {
            // 擋 alt、ctrl 鍵
            if (event.altKey || event.ctrlKey) {
                    return false;
            }
            // 擋 F1 ~ F12 功能鍵,其中此種寫法只能擋 FF 的 F1 鍵,無法擋 IE 的 F1 鍵
            if (event.keyCode >= 112 && event.keyCode <= 123) {
                    try {
                            // IE 要將 keyCode 設為 0 才能真正擋下 F2 ~ F12 功能鍵,
                            // 但 FF 會丟 Exception,所以用 try-cache 擋住
                            event.keyCode = 0; 
                    } catch(e){}
                    return false;
            }
        }
}

document.onmousedown = lock;
document.oncontextmenu = lock;
document.onkeydown = lock;
window.onhelp = lock;
 
參考資料:
    http://topic.csdn.net/t/20030226/19/1469908.html
 
需封鎖的快速鍵整理:
  • 滑鼠右鍵:開啟右鍵選單。
  • Ctrl + N:開啟新視窗至當前 URL。
  • Ctrl + R:重載網頁,等同 F5 功能鍵。
  • F1:開啟 Help 視窗。
  • F5:重載網頁。
  • Alt + 左方向鍵:回上一頁。等同瀏覽器上的 <- 按鈕。
  • Alt + 右方向鍵:到下一頁。等同瀏覽器上的 -> 按鈕。
  • Alt + F4:關閉視窗(或頁籤)。
  • 退格刪除鍵(Backspace):回上一頁。等同瀏覽器上的 <- 按鈕。
  • Shift + F10:開啟右鍵選單。等同滑鼠右鍵。
  • 在頁面上連結(<a href>) 上按下 Shift + 滑鼠左鍵:開啟新視窗至該連結的 URL。

創作者介紹
創作者 大笨鳥 的頭像
大笨鳥

大笨鳥的私房菜

大笨鳥 發表在 痞客邦 留言(0) 人氣()