Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.07.2013, 17:59
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

[Цена 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();
}
?>



В принципе все... Все работает, только вот всплывающие окна блокирует браузер. как добиться того, чтобы этого не происходило.

В тексте я предоставил свой вариант, возможно, у Вас будет другой, главное чтобы работало!

Последний раз редактировалось Vladislav, 11.07.2013 в 18:09.
Ответить с цитированием
  #2 (permalink)  
Старый 11.07.2013, 18:08
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А что за проверка? Почему ее нельзя сделать при генерации страницы?
Ответить с цитированием
  #3 (permalink)  
Старый 11.07.2013, 18:18
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

Сообщение от danik.js Посмотреть сообщение
А что за проверка? Почему ее нельзя сделать при генерации страницы?
Одна из проверок существует ли id юзера в сессии. То есть пользователь мог зайти на сайт с двух страниц, на первой странице выйти из аккаунта, а на второй осуществлять переходы на сайты (в то время не быть авторизованным т.к. только что вышел). + в php файле после проверок добавляются данные в другую таблицу данных.

Например: пользователь с id 1 перешел по сайту с id 200..

Последний раз редактировалось Vladislav, 11.07.2013 в 18:22.
Ответить с цитированием
  #4 (permalink)  
Старый 11.07.2013, 18:29
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

сначала открываем пустую страницу а через 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>

Последний раз редактировалось vadim5june, 11.07.2013 в 18:31.
Ответить с цитированием
  #5 (permalink)  
Старый 11.07.2013, 18:43
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

Хм... я попробую вечером этот вариант, сейчас по делам ухожу и отпишусь еще. Но думаю, что тоже не получиться... Ведь, допустим php-скрипт определит, что что-то не так и ему не нужно будет перенаправлять на ссылку. То этот код все-равно же переправит, я так понял?
Ответить с цитированием
  #6 (permalink)  
Старый 11.07.2013, 18:45
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от Vladislav Посмотреть сообщение
Хм... я попробую вечером этот вариант, сейчас по делам ухожу и отпишусь еще. Но думаю, что тоже не получиться... Ведь, допустим php-скрипт определит, что что-то не так и ему не нужно будет перенаправлять на ссылку. То этот код все-равно же переправит, я так понял?
окно откроется сразу-после клика-от этого Вы не уйдете
если не надо перенаправлять то окно можно закрыть
Ответить с цитированием
  #7 (permalink)  
Старый 11.07.2013, 23:38
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

Сообщение от vadim5june Посмотреть сообщение
окно откроется сразу-после клика-от этого Вы не уйдете
если не надо перенаправлять то окно можно закрыть
Хм.. ну вроде твой способ получается только сразу вопросы:
1) Как поместить переменную url в скрипт, чтобы перенаправляло именно на тот url, который нужно... достать его я могу так:

var form = $(this).closest('#group_block');
var url = form.find("#url_group").val();


2) Ты говоришь "если не надо перенаправлять то окно можно закрыть" как это сделать?

Я просто в js не сильно фурычу..
Ответить с цитированием
  #8 (permalink)  
Старый 12.07.2013, 05:18
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

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()

Последний раз редактировалось vadim5june, 12.07.2013 в 08:03.
Ответить с цитированием
  #9 (permalink)  
Старый 12.07.2013, 08:36
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

вот вам костыль, безотказно работает на одном моем сайте
$url = 'test';
echo '<form action="'.$url.'" id="form" target="_blank"></form>';

button.onclick = function() {
   document.getElementById('form').submit()
}
Ответить с цитированием
  #10 (permalink)  
Старый 12.07.2013, 09:01
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

ОлегА, в каких браузерах проверял?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Всплывающие окна в контакте Михаил1 Элементы интерфейса 2 25.02.2012 22:26
Firefox 5. Перестали работать всплывающие окна mikel Общие вопросы Javascript 3 24.06.2011 13:36
Всплывающие окна cyberx Общие вопросы Javascript 0 09.02.2010 07:23
Всплывающие окна Major_Krieg Серверные языки и технологии 2 10.11.2009 15:21
Всплывающие окна Silа Общие вопросы Javascript 0 03.11.2009 12:56