2015-12-10 2 views
-3

Я написал этот скрипт некоторое время назад, который работал лучше для меня, чем любое другое расширение с правом щелчка.Более эффективный способ включения щелчка правой кнопкой мыши?

function rightClickEvent(event) { 
    event.stopPropagation(); 
    return true; 
} 

function enableRightClick(elements) { 
    if (elements.length === 0) return; 
    Array.prototype.slice.call(elements, 0).forEach(element => { 
    element.addEventListener('contextmenu', rightClickEvent, true); 
    enableRightClick(element.children); 
    }); 
} 

enableRightClick(document.children); 

Похоже, что излишним, потому что он добавляет слушателя действий к каждому элементу на всей странице. Есть ли способ достичь аналогичных результатов, например, способ перехвата каждого события для oncontextmenu, без необходимости пересекать DOM всей страницы?

Чтобы уточнить это, щелкните правой кнопкой мыши в ENABLING в средах, где простая смена контекстного меню на кнопке не работает.

+0

Вы имеете в виду * dis * able? –

+0

Возможный дубликат [отключить правый клик в javascript] (http://stackoverflow.com/questions/30965212/disable-right-click-in-javascript) –

+0

@MattBurland no Я имею в виду enable. Есть несколько страниц, которые я часто посещаю, которые имеют щелчок правой кнопкой мыши, и я использую это (без стрелки жира), чтобы включить его. – m0meni

ответ

1

Я бы предположил, что вы просто используете document.getElementsByTagName("*") для извлечения всех элементов в документе, а не рекурсивного хождения по иерархии самостоятельно.

И для полноты вам может потребоваться отслеживать, чтобы элементы DOM были вставлены в страницу динамически после подключения.

Как работать с страницей, которая отключает щелчок правой кнопкой мыши, полностью зависит от того, как страница реализует функцию отключения. Если вы хотите использовать метод, который обрабатывает наиболее возможные способы его отключения, тогда вы должны обрабатывать его в листовых узлах и на каждом узле, как вы делаете - другого пути нет. Любая более простая опция, использующая распространение событий для обработки события на более высоком уровне, может быть заблокирована JS на странице, поэтому, если вы пытаетесь избежать блокировки, то вам придется обрабатывать ее на листовом узле.

+0

Это именно то, что я искал. Спасибо! – m0meni

Смежные вопросы