[Цена 10$] Всплывающие окна
Опять я, всем привет еще раз. Извиняюсь, если пишу не в тот раздел (переместите в нужный, пожалуйста), но я не могу решить свою проблему уже неделю. По этому предлагаю 10$ (в знак благодарности) тому, кто ее решит, понимаю что это не много, но все же на форуме решаются тысячи задач совершенно бесплатно, что, кстати, очень круто! (оплата по веб-мани или банковский перевод на карту).
Что имеем: Представим, что мы рекламируем сайты. На странице 10 заказов/сайтов (описание, фото..), у каждого есть скрытое поле id (номер заказа) и скрытое поле url (ссылка на сайт этого заказа). С низу, под каждым заказом, есть кнопка "перейти на сайт". Чего нужно добиться: При клике на кнопку "перейти на сайт" ajax'ом передаем php файлу id заказа (из скрытого поля) и там проверяем кое-какие данные. И если все хорошо, то нужно в сплывающем окне открыть сайт, таким образом, чтобы не появлялось предупреждение "всплывающее окно заблокировано". Что у меня НЕ получается: НЕ получается только обойти разрешение. Оно всегда появляется, если пользователь зашел с нового браузера, где этого разрешения он еще не получал. А все остальное работает, то есть все проверки, все-все-все работает... только вот это разрешение меня напрягает! Обойти это разрешение у меня получалось только если пользователь напрямую нажал на кнопку и !!без всяких проверок!! js перенаправлял. Кстати, это решение мне посоветовали здесь на форуме, код выглядел так: <button id="button">Открыть окно</button> <script> button.onclick = function() { var newWin = window.open('$url', 'JSSite', 'width=880,height=550,resizable=yes,scrollbars=yes,status=yes'); newWin.focus(); }; </script> Но мне нужно сделать с проверкой! А там увы браузер блокирует всплывающие окна. Материалы: html: (таких блоков у меня 10) <div class='group_block' id='group_block'> <input type='hidden' value='$id' id='id_group' name='id_group'> <input type='hidden' value='$url' id='url_group' name='url_group'> <div class='group_price'>$price</div> <div class='group_photo'><img src='$photo' width='90px' height='90px' title='$name'></div> <div class='group_button' id='group_button'>Перейти на сайт</div> </div> <div class='error_reg_box' style='display: none'></div> // текст ошибки сюда заносится js: $(function(){ $('#groups_block_wrap').on('click', '#group_button', function () { var form = $(this).closest('#group_block'); var id_group = form.find("#id_group").val(); $.ajax({ type: "POST", url: "handlers/group_put", data: {"id_group": id_group}, cache: false, success: function(response){ var messageResp = new Array('Ошибка, попробуйте еще раз..','Неизвестная ошибка, попробуйте еще раз..','Этот заказ уже выполнили, попробуйте другой..','Вы уже выполнили этот заказ, попробуйте другой..','Вы уже состоите в данной группе, выберете другую..'); var resultStat = messageResp[Number(response)]; if(response == 0){ $(".error_reg_box").text(resultStat).show().delay(3500).slideToggle(1000); } else if(response == 1){ $(".error_reg_box").text(resultStat).show().delay(3500).slideToggle(1000); } ............ // другие ошибки. else { form.css("display", "none"); $(".error_reg_box").html(response); // С помощью этой строки я вставляю в html документ из php обработчика скрипт, который открывает окно. (смотрите далее) } php: <?php session_start(); include '../blocks/db.php'; include '../handlers/group_points_person.php'; if (!empty($_POST['id_group'])) $id_group = $_POST['id_group']; if (isset($_POST['vip'])) $vip = $_POST['vip']; $id = $_SESSION['id']; if(empty($id)){ echo 0; exit(); } elseif(empty($id_group)){ echo 1; exit(); } ............ // другие проверки... // с помощью id (который мы получили из скрытого поля html) мы из БД достаем url записи и заносим ее в переменную. $url = 'test'; // вот сюда ее заносим echo "<script> var newWin = window.open('$url', // и тут делаем перенаправление именно на нее 'JSSite', 'width=880,height=550,resizable=yes,scrollbars=yes,status=yes') newWin.focus() </script>"; // вот этот код я вставляю в html документ и происходит перенаправление... exit(); } ?> В принципе все... Все работает, только вот всплывающие окна блокирует браузер. как добиться того, чтобы этого не происходило. В тексте я предоставил свой вариант, возможно, у Вас будет другой, главное чтобы работало! |
А что за проверка? Почему ее нельзя сделать при генерации страницы?
|
Цитата:
Например: пользователь с id 1 перешел по сайту с id 200.. |
сначала открываем пустую страницу а через 4 секунды(после проверки) перенаправляем
<button onclick=f1()>newsru</button> <script> function f1(){ var newWin = window.open('','JSSite', 'width=880,height=550,resizable=yes,scrollbars=yes,status=yes') ;setTimeout(function(){newWin.location.href='http://javascript.ru'},4000);} </script> |
Хм... я попробую вечером этот вариант, сейчас по делам ухожу и отпишусь еще. Но думаю, что тоже не получиться... Ведь, допустим php-скрипт определит, что что-то не так и ему не нужно будет перенаправлять на ссылку. То этот код все-равно же переправит, я так понял?
|
Цитата:
если не надо перенаправлять то окно можно закрыть |
Цитата:
1) Как поместить переменную url в скрипт, чтобы перенаправляло именно на тот url, который нужно... достать его я могу так: var form = $(this).closest('#group_block'); var url = form.find("#url_group").val(); 2) Ты говоришь "если не надо перенаправлять то окно можно закрыть" как это сделать? Я просто в js не сильно фурычу.. |
newWin нужно сделать глобальной
в 21 строке ты $url получаешь а строки с 23-27 заменяем if($url){newWin.location.href=$url;newWin.focus()} else newWin.close()//если нет перенаправленич то закрываем так как окон много то newWin нужно сдедать массивом var newWin=[],ind=0; button.onclick = function() { newWin[ind] = window.open('l', 'JSSite','width=880,height=550,resizable=yes,scrollbars=yes,status=yes'); newWin.focus();}; //ответ с сервера после проверки if($url){newWin[ind].location.href=$url;newWin[ind++].focus()} else newWin[ind].close() |
вот вам костыль, безотказно работает на одном моем сайте
$url = 'test'; echo '<form action="'.$url.'" id="form" target="_blank"></form>'; button.onclick = function() { document.getElementById('form').submit() } |
ОлегА, в каких браузерах проверял?
|
Часовой пояс GMT +3, время: 18:08. |