function disableCopyPaste(elm) {
// Disable cut/copy/paste key events
elm.onkeydown = interceptKeys
// Disable right click events
elm.oncontextmenu = function() {
return false
}
}
function interceptKeys(evt) {
evt = evt||window.event // IE support
var c = evt.keyCode
var ctrlDown = evt.ctrlKey||evt.metaKey // Mac support
// Check for Alt+Gr (http://en.wikipedia.org/wiki/AltGr_key)
if (ctrlDown && evt.altKey) return true
// Check for ctrl+c, v and x
else if (ctrlDown && c==67) return false // c
else if (ctrlDown && c==86) return false // v
else if (ctrlDown && c==88) return false // x
// Otherwise allow
return true
}
我使用event.ctrlKey而不是检查键代码,因为在Mac OS X上的大多数浏览器上Ctrl/Alt“down”和“up”事件从未触发,所以检测的唯一方法是在Ctrl键按下后在例如c事件中使用event.ctrlKey。我还用metaKey替换了mac的ctrlKey。
该方法的局限性:
Opera不允许禁用右击事件
据我所知,浏览器窗口之间的拖放是无法阻止的
例如,Firefox中的edit->copy菜单项仍然可以允许复制/粘贴
对于拥有不同键盘布局/locale的人来说,复制/粘贴/剪切的键代码也不一定相同(尽管布局通常遵循与英语相同的标准),但是“禁用所有控制键”意味着select all etc也将被禁用,所以我认为这是需要做出的妥协。