- Могу ли я узнать на PHP (без javascript), щелкнул ли пользователь правой кнопкой мыши по ссылке?
- 2 ответа
- Собственное меню, появляющееся при клике правой кнопки мышки
- Как создать контекстное меню с действием надо строкой?
- Войдите, чтобы написать ответ
- Как из коллекции, получить Input в котором произошло изменение?
- Событие нажатия правой кнопкой мыши на обьект
- 4 ответа 4
Могу ли я узнать на PHP (без javascript), щелкнул ли пользователь правой кнопкой мыши по ссылке?
На основе некоторых идей, собранных в Интернете, я кодировал «решение» для перенаправления всего PDF-файла, например, загрузки с сервера в форму reCAPTCHA, и, после прохождения, загружал запрошенный файл. Он не зависит от cms и работает, но у меня есть одна ситуация, когда загружается неправильный файл.
Код находится по адресу: https://github.com/Siot/docafi (файл request.php)
- Все запросы .pdf перенаправляются на request.php через .htaccess:
RewriteRule ^(.+.pdf)$ request.php?file=$1 [NC,L]
Особый случай — это когда он первый раз в сеансе, но начинает загрузку с помощью щелчка правой кнопкой мыши по ссылке.
Он загружает неверное содержимое файла, потому что я не могу показать форму reCAPTCHA. Могу ли я узнать, щелкнул ли пользователь ссылку правой кнопкой мыши без JavaScript? Мне нужно прозрачное решение для разных файлов cms / html на сервере.
Могу я решить эту проблему другим способом?
2 ответа
Нет, выбор «Сохранить как . » во всплывающем меню работает точно так, как должен — он сохраняет все, что было получено по ссылке, на локальный диск, вместо того, чтобы пытаться отобразить это в браузере. Таким образом, совершенно правильно, что вместо этого он загружает HTML-файл с помощью reCAPTCHA, и нет никакого способа его обнаружить, даже с Javascript — на сервер все равно, поскольку браузер выдает тот же запрос , он просто по-другому обрабатывает результат. Вы можете установить флаг для события onContextMenu , но у него все равно будет неправильная настройка, если вы затем откроете ссылку, щелкнув ее левой кнопкой мыши или вставив адрес в адресную строку вручную.
Это должно быть возможно с javascript, однако PHP, я уверен, что это невозможно сделать, учитывая, что это на стороне сервера.
Просмотрите некоторые предыдущие вопросы о переполнении стека, например:
Собственное меню, появляющееся при клике
правой кнопки мышки
Предлагаем Вашему вниманию необычный скрипт, который позволит Вам создать свое собственное меню, которое появится при клике правой кнопкой мышки.
Для демонстрации работы скрипта появляющегося собственного меню при нажатии правой кнопкой мышки, просто кликните на правую кнопку мышки в любом месте данной странички.
Для получения своего собственного меню, появляющегося при клике правой кнопкой мышки как в демонстрационном примере, добавьте в шапку Вашего сайта (между тегами ) стиль создаваемого меню:
< style type = "text/css" >
#main_menu position : absolute ;
width : 160px ;
border : 1px solid #000000;
background — color : #EEEEEE;
font — family : «Verdana» ;
line — height : 20px ;
font — size : 14px ;
z — index : 99 ;
visibility : hidden ;
>
#main_menu > div padding — left : 10px ;
padding — right : 10px ;
>
#main_menu > :hover background — color : #6666FF;
color : #FFFFFF;
cursor : pointer ;
>
Далее необходимо создать само меню, которое будет показываться при клике правой кнопкой мышки. Для этого необходимо вставить на свою страничку следующий код:
Далее вставляем скрипт, который будет отображать и скрывать меню, появляющееся при нажатии правой кнопки мышки:
< script type = "text/javascript" >
var mouse_x = 0 ;
var mouse_y = 0 ;
menu_obj = document . getElementById ( «main_menu» );
function mousemove ( event ) if ( document . attachEvent != null ) mouse_x = window . event . pageX ;
mouse_y = window . event . pageY ;
> else if (! document . attachEvent && document . addEventListener ) mouse_x = event . pageX ;
mouse_y = event . pageY ;
>
>
function show_menu ( e ) mousemove ( e );
menu_obj . style . left = mouse_x + «px» ;
menu_obj . style . top = mouse_y + «px» ;
menu_obj . style . visibility = «visible» ;
return false ;
>
document . oncontextmenu = show_menu ;
document . onclick = hide_menu ;
Если Вы все сделали так, как написано в данной теме, то у Вас должно получиться точно такое же меню, доступное при клике по правой кнопке мышки, как и в нашем примере.
Как создать контекстное меню с действием надо строкой?
Доброго времени суток!
Есть select который выгружает данные из базы mysql в таблицу на php
как сделать так, что б можно было нажать ПКМ на строку выгруженную из базу и выбрать действие какое либо действие??
query($query); while($row = mysqli_fetch_array($result)) < echo""; echo"";echo $row['id']."
\n";echo" "; echo"";echo $row['Tema']."
\n";echo" "; echo"";echo $row['Content']."
\n";echo" "; echo"";echo $row['File']."
\n";echo" "; echo"";echo $row['Date_upload']."
\n";echo" "; echo"";echo $row['Control_date']."
\n";echo" "; echo"";echo $row['Osp']."
\n";echo" "; echo"";echo $row['Actual_control']."
\n";echo" "; echo" "; > ?>
Простой 4 комментария
Берете пишете скрипт который отлавливает нажатие ПКМ, верстаете «контекстное меню», по нажатию на ПКМ вызываете ваше меню у event.target.
Почему мне кажется что вы пытаетесь сделать, то на что не способны? (Просто по вашей верстке через echo вообщем то все понятно. )
Я предположил что вы хотите редактировать поля из базы.
fokin_nikolay1989, верстка через эхо — и вправду подозрительно выглядит) лучше передать данные в js, там сделать селект и appendChild() залить в верстку.
Берете пишете скрипт который отлавливает нажатие ПКМ, верстаете «контекстное меню», по нажатию на ПКМ вызываете ваше меню
Войдите, чтобы написать ответ
Как из коллекции, получить Input в котором произошло изменение?
Событие нажатия правой кнопкой мыши на обьект
Мне нужно как на http://www.ucoz.ru/ сделать так чтобы при клике правой кнопкой на обьект не выводился список браузера а исполнялась моя функция как это осущесвить желательно кросбраузерно?!
4 ответа 4
$('selector').mousedown(function(event) < event.preventDefault(); if(event.button == 0)< alert('Вы кликнули левой клавишей'); >else if(event.button == 1) < alert('Вы кликнули левой колесиком'); >else if(event.button == 2) < alert('Вы кликнули правой клавишей'); >>);
Т.е. по стандартам W3C : 0 – левая клавиша, 1 – средняя, 2 – правая. Но тут есть и засада, насколько помню. Осел видит: 1 – левая, 2 – правая, 4 – средняя. Надо будет проверить.
А запретить вывод меню как незнаете? на ucoz во всех кроме Opera меню типа исходный код своства во весь экран непоявляется
Пример html:
Click here with the right mouse button.
var $j = jQuery.noConflict(); // Функция для определения координат указателя мыши function defPosition(event) < var x = y = 0; var d = document; var w = window; if (d.attachEvent != null) < // Internet Explorer & Opera x = w.event.clientX + (d.documentElement.scrollLeft ? d.documentElement.scrollLeft : d.body.scrollLeft); y = w.event.clientY + (d.documentElement.scrollTop ? d.documentElement.scrollTop : d.body.scrollTop); >else if (!d.attachEvent && d.addEventListener) < // Gecko x = event.clientX + w.scrollX; y = event.clientY + w.scrollY; >return ; > function menu(event) < // Блокируем всплывание события contextmenu event = event || window.event; event.cancelBubble = true; // Задаём позицию контекстному меню var menu = $j('.right-menu').css(< top: defPosition(event).y + "px", left: defPosition(event).x + "px" >); // Показываем собственное контекстное меню menu.show(); // Блокируем всплывание стандартного браузерного меню return false; > // Закрываем контекстное при клике правой кнопкой по документу $j(document).on('contextmenu', function()< $j('.right-menu').hide(); >); // Закрываем контекстное при клике левой кнопкой по документу $j(document).on('click', function()< $j('.right-menu').hide(); >);