Кроссбраузерность и iframe fancybox

Тема в разделе "JavaScript", создана пользователем darkgod, 11 мар 2014.

Модераторы: ZiX
  1. darkgod

    darkgod Создатель

    Регистр.:
    13 апр 2006
    Сообщения:
    38
    Симпатии:
    3
    Здравствуйте, возникла следующая проблема.

    Написал php-скрипт, к нему get-запросом передаются различные параметры, обработав которые, скрипт делает редирект:
    PHP:
    echo('<script>window.location="'.$url.'"</script>');
    Если вызывать скрипт с сайта таким образом:
    HTML:
    <a href="script.php?id=123&btype=type1&title=hello&url=ya.ru" target="_blank" onclick="javascript:window.open(this.href,
      '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600');return false;"></a>
    То все замечательно, в окне отображается содержимое после обработки и редиректа скрипта, если же открыть с помощью fancybox, то возникает ошибка безопасности (кроссбраузерный запрос) :
    HTML:
        $(".openframe").fancybox({
            type:'iframe',
            maxWidth    : 600,
            maxHeight    : 600,
                    .....
        });
    Хотелось бы организовать всплывающее окно с помощью FancyBox без ошибки безопасности, может кто-то подскажет как инициализировать этот запрос, ведь без проблем можно открыть в fancybox google maps. Но там обращение на прямую, а не к php-скрипты, а потом уже редирект.
    Была идея просто выводит ссылку php-скриптом, которую бы открывал FancyBox, но попробовав, также ошибка безопасности.

    Спасибо.
     
  2. dwarf

    dwarf Постоялец

    Регистр.:
    12 июн 2011
    Сообщения:
    88
    Симпатии:
    18
    Главная страница:
    HTML:
    <!DOCTYPE html>
    <html>
        <head>
            <title>Main page</title>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width">
        </head>
        <body>
            <h1>Главная</h1>
            <div><iframe src="frame.html" style="width: 400px;height: 500px;"></div>
        </body>
    </html>
    Фрейм:
    HTML:
    <!DOCTYPE html>
    <html>
        <head>
            <title>Frame</title>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width">
        </head>
        <body>
            <h1>Frame</h1>
            <script>
                window.location = "http://e1.ru";
            </script>
        </body>
    </html>
    Все работает, во фрейме отображается нужный url, не важно, fancybox используется или что-то другое


    Если в заголовках ответа страницы, на который осуществляется редирект, установлено
    что-то вроде
    Код:
    X-Frame-Options:DENY
    , то браузер никак не отобразит её в iframe.
    Если нужно из iframe поменять адрес в родительской, главной страницы, нужно использовать конструкцию: top.location вместо window.location
     
    Последнее редактирование: 12 мар 2014
  3. darkgod

    darkgod Создатель

    Регистр.:
    13 апр 2006
    Сообщения:
    38
    Симпатии:
    3
    Спасибо за ответ, создал для теста html-ку с фреймом, как у вас в примере, в обоих случаях window/top - Нарушение безопасности, посмотрел сниффером заголовки, заголовка X-Frame-Options : DENY - нет.

    Скорей всего придется создавать popup window.open :(
     
  4. Alekc

    Alekc Постоялец

    Регистр.:
    9 мар 2014
    Сообщения:
    50
    Симпатии:
    26
    Конечный урл находится на том же домене? Нет перехода с https na http?
     
  5. darkgod

    darkgod Создатель

    Регистр.:
    13 апр 2006
    Сообщения:
    38
    Симпатии:
    3
    нет, не на том же, только я чего-то глюкнул, создал тему не кроссдоменность, а кробраузерность, а поправить уже нельзя (если есть возможность, поправьте, пожалуйста, модератор).

    в некоторых случаях есть переход, в некоторых нет.

    расскажу подробнее о скрипте, который делает редирект:
    отправляется get-запрос:
    id - id поста;
    url - ссылка на пост;
    type - в какой соц. сети происходит "расшаривание".

    В зависимости от type происходит редирект по ссылкам:


    Без скрипта нельзя, перед редиректом скрипт делает запрос в соц.сеть, получает количество "расшариваний" и заносит их в БД.
     
  6. dwarf

    dwarf Постоялец

    Регистр.:
    12 июн 2011
    Сообщения:
    88
    Симпатии:
    18
    Проверил, как минимум у фейсбука
    Код:
    Refused to display 'https://www.facebook.com/sharer/sharer.php?u=' in a frame because it set 'X-Frame-Options' to 'DENY'.
    Так что в решении с iframe нет смысла продолжать искать ошибку, нужно использовать полноценное отдельное окно.