вроди как то так,
document.onContextMenu = function() { return true; } |
да не выключается в опере событие oncontextmenu никакими способами
|
В опере никогда контекстное меню не выключалось и не будет, не парьтесь, забейте на оперу, это говнобраузер...
|
Цитата:
|
в опере, только если включена поддержка правой кнопки в настройках, возможен грязный хак - подложить невидимую кнопку при нажатии правой кнопки мыши, т.к. над кнопками свое контекстное меню опера не показывает
|
Цитата:
|
no opera context menu
Долго исследовал эту проблему.
Никакие .preventDefault() и return false не спасут. Включение возможности отслеживания правой кнопки тоже не спасают, т.к. это просто ничего не даёт. Единственный выход, как было уже сказано выше - подложить кнопку под курсор. Даю описание, как это правильно сделать, потому что тут хватает подводных камней: 1. События contextmenu для Оперы не существует, поэтому для него просто вешаем заглушку для остальных браузеров. Натыкался, что вроде как реализовано onrightclick для Оперы под Лялих, но для виндяшной Оперы его также не существует (но Лялих так и не проверил). 2. Подкладывать необходимо <input type="button"/>, этот же фокус с <button></button> Опера игнорирует. Протестил и на других типах. Отменяется также checkbox и radio. Заметил, что отменить может любой input, если на нем не находился курсор до события mouseup. 3. Подавление меню происходит ДО mouseup над вышеупомянутым инпутом. Т.е. если до события mouseup кнопка не окажется под курсором, то подавления не будет. 4. Из третьего пункта следует, что вызывать обработчик события для контекстного меню следует именно при событии mouseup, если была нажата правая клавиша мыши. В результате всех этих пунктов получился (почти) кроссбраузерный говнокод: document.oncontextmenu=function(){return false;} document.onmousedown=function(e){ if(e.button==2) { window.hack_button=document.body.appendChild(document.createElement('input')); hack_button.type="button"; hack_button.style.cssText="display:block;position:fixed;width:100%;height:100%;border:none;top:0;left:0;opacity:0;"; } } document.onmouseup=function(e){ if(e.button==2) { //тут вписываем грёбаный код обработчика //... hack_button.parentNode.removeChild(hack_button); } } Суть в том, что кнопка на весь экран (ее не нужно таскать за курсором), она в любом случае окажется под курсором. На ранних операх (до 10-й) не тестил, но предполагаю, что тоже работает. Плюсы: 1. Способ действительно работающий. 2. Кнопка прозрачна и поэтому не видна юзеру. Минусы: 1. Способ единственный, но отвратительный. 2. Если пользователь переместил мышь с момента события mousedown, то к сожалению, событие mouseup вызывает подкладываемая кнопка. Юзать, не юзать - решаете сами... |
pashak,
Опера, начиная с версии 10.50, позволяет отменять показ контекстного меню. Как и что вы тестили непонятно. Кнопка во весь экран это, извините, бред какой-то. Как через неё со всеми элементами на странице-то общаться? |
Цитата:
Цитата:
pashak, ну метода не для нубов :) +1 |
Цитата:
|
Часовой пояс GMT +3, время: 17:22. |