2010-06-02 3 views
10
document.addEventListener('contextmenu', function (e) { 
    e.preventDefault() 
    e.stopPropagation() 
    e.returnValue = false 
    e.cancleBubble = true 
}) 

Không có cách nào?Làm cách nào để kích hoạt lại menu ngữ cảnh trong trường hợp này?

Chỉnh sửa: document.oncontextmenu = null không hoạt động.

P.S. Tôi không thể có tham chiếu của hàm listener vì tôi không phải là chủ sở hữu của trang web ngăn cản menu ngữ cảnh.

+0

gì ý bạn là "đạo đức"? –

+7

Các trang web cố ý vô hiệu hóa menu ngữ cảnh xứng đáng để các tập lệnh của họ bị nén hoặc không chạy, theo ý kiến ​​của tôi. (Tôi sử dụng NoScript.) Tôi thường điều hướng bằng cách nhấp chuột phải và chọn Quay lại hoặc Chuyển tiếp. Không có gì phi đạo đức về việc muốn trình đơn ngữ cảnh hoạt động. Các tác giả trang web vô hiệu hóa nó ở nơi đầu tiên là ngu ngốc. – JYelton

+0

Bạn đã thử 'document.oncontextmenu = null;'? –

Trả lời

4

Nếu bạn đang thực sự tuyệt vọng, hãy thử thêm này trước khi addEventListener được gọi. Nó hoạt động trong cả FF và Chrome. Tôi đã không kiểm tra bất cứ điều gì khác.

document.superListener = document.addEventListener; 
document.addEventListener = function(type, listener, useCapture){ 
    if(type != 'contextmenu') 
     document.superListener(type, listener, !!useCapture); 
}; 

Nó có thể không phải là cách tốt nhất để làm điều này, nhưng nó phải được hoàn thành công việc trên ví dụ cụ thể của bạn :)

+0

Cảm ơn bạn đã trả lời. Có vẻ như không thể bật lại menu ngữ cảnh "sau" cuộc gọi ... –

0

Thay vì tắt trình đơn ngữ cảnh, tại sao bạn không chỉ định sự kiện nhấp chuột phải?

http://abeautifulsite.net/2008/05/jquery-right-click-plugin/

+0

Tôi không phải là người vô hiệu hóa menu ngữ cảnh. Một số trang web vô hiệu hóa nó và tôi muốn phá vỡ nó. –

+0

Ồ, bạn có ý nghĩa như một kịch bản khúc côn cầu hay gì đó? – Matrym

16

tôi sử dụng bookmarklet của tôi trong trường hợp này:

javascript:(function(w){ 
    var arr = ['contextmenu','copy','cut','paste','mousedown','mouseup','beforeunload','beforeprint']; 
    for(var i = 0, x; x = arr[i]; i++){ 
     if(w['on' + x])w['on' + x] = null; 
     w.addEventListener(x, function(e){e.stopPropagation()}, true); 
    }; 
    for(var j = 0, f; f = w.frames[j]; j++){try{arguments.callee(f)}catch(e){}}})(window); 
+0

Điều này hoạt động tốt. Chỉ cần phải giới hạn các tùy chọn để 'contextmenu'. – ThiagoPonte

+0

Hoạt động rất tốt, cảm ơn –

+0

Làm cách nào tôi có thể bỏ phiếu này lên 10 lần? Cảm ơn! – tyron