Редирект и автоматический клик на кнопку
Добрый день!
Нужна ваша помощь в реализации следующей задачи. Задача: есть кнопка, при нажатии на которую происходит переход (или редирект) на определенную страницу, и на этой странице происходит автоматический клик на определенную кнопку. Есть варианты? |
document.querySelector('button').click()
|
danik.js, просьба, напиши подробнее, пожалуйста. Я новичок в JS, и многих вещей пока не понимаю.
Например, есть кнопка: <input class="btn-success btn_checkout" type="submit" name="checkout" value="{"str_checkout"|translate}" /> Есть страница, на которую нужно перейти: www.radioexpert.ru/checkout/ Там есть ссылка-адрес в виде кнопки, которая должна автоматически нажаться: <a class="standart-order" onclick=""> <!-- <button > --> Стандартный заказ <!-- </button> --> </a> |
radioexpert.ru - вы имеете возможность вставить на этот сайт скрипт?
Или может быть вам нужно написать userscript, устанавливаемый в браузер, То есть это не для пользователей, а для именно для вас ? |
Да, я могу вставить на сайт скрипт, и он предназначен абсолютно для всех пользователей.
|
document.querySelector('.standart-order').click()
|
<script type= "text/javascript">
function buttonCheckout() { var url = document.getElementById('id_buttonCheckout'); document.location.href = 'http://bekaa.tmweb.ru/checkout/'; document.querySelector('standart-order').click(); }; </script> и кнопка: <a href="javascript: buttonCheckout();" class="btn btn-large btn-success btn_checkout" id="buttonCheckout">Перейти</a> Теперь перенаправление происходит, но не нажимает на кнопку "standart-order" |
Нет вариантов?
|
так код "нажатия" на кнопку нужно вставлять на страницу, на которую переходим. Одна страница не может управлять другой страницей - это аксиома. Иначе и представить страшно.
|
Хорошо, пусть так. Но какой код нужно вставить? Потому что кнопок с перенаправлением может быть несколько. И при нажатию на каждую из них происходит перенаправление на одну и туже страницу, но при этом на ней автоматически нажимается только нужная кнопка, соответсвующая той, что была нажата ранее.
|
Страница, на которую идет перенаправления находится на том же домене? Тогда можно через куки/sessionStorage. Иначе - через get-параметр в строке запроса ( /page?button=x к примеру)
|
Опишу задачу еще раз, но упрощенее и понятнее.
Есть кнопка на странице index.html <a href="javascript: buttonCheckout();" class="buttonQuick" id="buttonCheckout">Стандартный заказ</a> При нажатии на кнопку, должен произойти переход на страницу outside.html, и, на этой странце, АВТОМАТИЧЕСКИ, т.е. без участия человека, произойти клик на кнопке <a class="standart-order" onclick=""> <!-- <button > --> Стандартный заказ <!-- </button> --> </a> Соответсвенно, JS код <script type= "text/javascript"> function buttonCheckout() { var url = document.getElementById('id_buttonCheckout'); document.location.href = 'outside.html'; document.querySelector('standart-order').click(); }; </script> Т.е. переход происходит, тут все ок. Но вот кнопка автоматически не нажимается. Вот в чем проблема. А если вставлять JS код на странице outside.html, то как отследить, какая кнопка была нажата на index.html? И - да, все страницы находятся на одном домене. |
а код document.querySelector('standart-order').click(); отрабатывает, если обе кнопки находятся на одной странице.
|
Цитата:
Как альтернативный вариант, я уже предлагал выше, добавляем ссылке query-параметр, проверяем его либо на сервере, вставляя некий код, либо на самой странице вытягивая через location.href и опять же, производя нужные действия. |
Уверен, что это бы сработало, но для меня очень сложно - я новичек в JS. И, я так понимаю, более простого способа нет?
Типа - тут нажал, там вызвалась нужная функция js и нажала на кнопку. |
Хорошо, просто не получится. Это понятно.
Итак, если мы передаем на index.html значение таким образом: <script type= "text/javascript"> function buttonCheckout() { document.location.href = 'outside.html/?standart-order'; } </script> то на outside.html ловим скриптом: <script type= "text/javascript"> function buttonCheckout() { var standart-order=location.search.substring(1); document.querySelector('.standart-order').click(); } </script> Вот тут я уже плаваю. Есть варианты? |
Godwar, на верном пути. Только имя переменной не может содержать знак дефис. И наверно лучше не query-строкой передавать, а через хэш-составляющую.
location.href = 'outside.html/#standart-order'; ... <script> (function(){ var hash = location.hash.substring(1); if (hash) { var element = document.querySelector('.' + hash); if (element) { element.click(); } } })(); </script> Этот скрипт разместить ниже кнопки, чтобы на момент его выполнения кнопка уже присутствовала в документе. querySelector не работает в IE7 если что. Если нужна его поддержка, то либо может на странице подключена jquery, либо подключить polyfill, либо использовать выборку по id. |
Увы, пока не работает.
JS код на index.html: <script type= "text/javascript"> function buttonCheckout() { location.href = 'http://bekaa.tmweb.ru/checkout/#standart_order'; } </script> и кнопка, которую нажимает пользователь: <a href="javascript: buttonCheckout();" class="btn btn-large btn-success buttonCheckout" id="buttonCheckout">Стандартный заказ</a> Код JS на outside.html {literal} <script> (function(){ var hash = location.hash.substring(1); if (hash) { var element = document.querySelector('.' + hash); if (element) { element.click(); } } })(); </script> {/literal} и кнопка, которая должна автоматически нажиматься: <a class="standart-order btn btn-large btn-success pull-right standart_order" onclick="" id="standart_order" name="standart_order"> <!-- <button > --> Стандартный заказ <!-- </button> --> </a> не понимаю. |
кнопка выше, чем скрипт, точно?
Если в консоли выполнить document.querySelector('.standart_order').click() , то результат имеется? |
Кнопка выше, чем скрипт - все верно.
document.querySelector('.standart_order').click() через консоль нормально отрабатывается - кнопка нажимается. |
Значит нужно поставить точку останова, выполнять пошагово и поглядеть что в скрипте происходит и что идет не так.
|
Прошел скрипт по каждой строке.
итог выполнения скрипта: this -> Window #standart_order arguments -> [] element -> a.standart_order hash -> "standart_order" toString -> function() Т.е. хеш распознал, но на строке element.click(); клик не происходит |
Есть варианты?
|
Цитата:
1 Переходы по ссылкам, возможны только после клика пользователем на ссылке -политика безопасности браузера 2 Вызов функции обработчика клика , и программная эмуляция клика вещи разные |
Обнаружил любопытную деталь.
когда выполняется скрипт <script> (function(){ var hash = location.hash.substring(1); if (hash) { var element = document.querySelector('.' + hash); if (element) { element.click(); } } })(); </script> то уже на строке <if (element)> дебаггер показывает в строке <element.click();> инициализированную переменную "element" как "a.standart_order" а скрипт a.standart_order.click() через консоль, естесственно, не работает. А вот document.querySelector('.standart_order').click() через консоль работает. Поэтому я пределал скрипт на такой: <script type="text/javascript"> (function(){ var hash = location.hash.substring(1); if (hash) { var element = ('.' + hash); if (element) { document.querySelector('element').click(); } } })(); </script> Тогда в строке <document.querySelector('element').click();> переменная "element" выглядит как ".standart_order" Но при этом вываливается ошибка: TypeError: document.querySelector(...) is null (?) /checkout/ (строка 782) () /checkout/ (строка 777) document.querySelector('element').click(); /checkout/ (строка 782) |
Цитата:
|
Возможно, вы правы, dmitriymar. Даже в этом варианте
<script type="text/javascript"> (function(){ var hash = location.hash.substring(1); if (hash) { var element = document.querySelector('.' + hash); if (element) { document.querySelector('.standart_order').click(); } } })(); </script> кнопка не нажимается. хотя сама по себе строка document.querySelector('.standart_order').click(); через консоль отрабатывается |
<script type="text/javascript"> (function(){ var hash = location.hash.substring(1); if (hash) { var element = document.querySelector('.' + hash); if (element) { alert(hash); } } })(); </script> отрабатывает и показывает текущий хеш |
Странная история. Если элемент был найден, то условие if (element) просто обязано выполниться. Попробуйте убрать условие и всегда вызывать element.click(). Ваши варианты неверные.
|
Быть может дело в том, что событие на клик этой кнопки отрабатывает другой скрипт?
<script type="text/javascript"> $(document).ready(function(){ $('.standart_order').click(function(){ $('#standart-order-block').css("display","block"); $('#quick-order-prev').css("display","none"); $('#standart-order-prev').css("display","none"); $('#credit-order-prev').css("display","none"); }); |
Цитата:
Цитата:
Есть вызов обработчика нажатия -если он есть . JavaScript прописанный выполняется и ничего больше. Есть человеческое нажатие на кнопку -поражающее череду событий браузера - запуск скриптов обработчиков нажатия, всплытие события, переход по ссылке... Есть программное эмулирование нажатия http://www.js-doc.ru/documentation/d...ocs#mfireevent В любом случае чтоб отработало браузерное действие перехода по ссылке, на неё нужно нажать -это политика безопасности браузера |
Часовой пояс GMT +3, время: 03:34. |