За последние 24 часа нас посетили 22768 программистов и 1275 роботов. Сейчас ищут 639 программистов ...

Вывод скрипта отображается во всех браузерах, кроме Сафари

Тема в разделе "PHP для новичков", создана пользователем alex-try, 7 апр 2011.

  1. alex-try

    alex-try Активный пользователь

    С нами с:
    7 апр 2011
    Сообщения:
    11
    Симпатии:
    0
    Здравствуйте, помогите пожалуйста разобраться с этим Сафари, что ему не хватает?

    Есть тестовый скрипт, просто выводящий то, что он получил через POST. Одна из возможных задач - вывести js-галерею, к-рая опять же приходит через POST. И все казалось бы работает, за исключением одной пакости, Сафари ни под Виндой ни под Маком ничего не показывает, вообще, пустую страницу показывает, хотя код получает, при посмотре кода всё на месте. Если же скормить Сафари этот же самый HTML код, к-рый он не показывает, но сохраненный как html файл, то все нормально работает. Не хочет показывать только когда получает его от PHP.

    Это скрипт
    PHP:
    1.  
    2. <!DOCTYPE html>
    3. <html>
    4. <head>
    5.     <title>Preview</title>
    6.     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    7.     <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Michroma|Terminal+Dosis+Light|Cabin+Sketch" />
    8.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    9.     <script type="text/javascript" src="galleria/galleria-1.2.2.js"></script>
    10. </head>
    11. <body>
    12. <?php
    13. if ( isset( $_POST ) )
    14.     $postArray = &$_POST ;          // 4.1.0 or later, use $_POST
    15. else
    16.     $postArray = &$HTTP_POST_VARS ; // prior to 4.1.0, use HTTP_POST_VARS
    17. foreach ( $postArray as $sForm => $value ) {
    18.     if ( get_magic_quotes_gpc() )
    19.         $postedValue = stripslashes( $value );
    20.     else
    21.         $postedValue = $value ;
    22. echo $postedValue;
    23. }
    24. ?>
    25. </body>
    26. </html>
    27.  
    Это результат работы скрипта
    HTML:
    1.  
    2. <!DOCTYPE html>
    3.     <title>Preview</title>
    4.     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    5.     <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Michroma|Terminal+Dosis+Light|Cabin+Sketch" />
    6.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    7.     <script type="text/javascript" src="galleria/galleria-1.2.2.js"></script>
    8. </head>
    9.     <div id="gallery">&nbsp;</div>
    10.     <script type="text/javascript">
    11.         var data = [
    12.             {image:"images/1.jpg",title:"",description:"",link:""},
    13.             {image:"images/3.jpg",title:"",description:"",link:""},
    14.             {image:"images/2.jpg",title:"",description:"",link:""}
    15.         ];
    16.         Galleria.loadTheme("galleria/themes/twelve/galleria.twelve.min.js");
    17.         $("#gallery").galleria({width: 500,height: 300,data_source: data});
    18.     </script>
    19. </body>
    20. </html>
    21.  
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    alex-try
    возможно в заголовках вы не то отдаете с сервера. Как проверить - я хз =)
     
  3. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Если что-то не так с заголовками, то
    http://www.php.su/functions/?get_headers
    Попробуй запросить свой же скрипт и посмотришь заголовки сразу.

    Но мне что-то подсказывает, что тебе нужно сбросить кэш браузера
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    обновить? =)

    можно к урлу дописать ченить типа ?lalala=pupupu
     
  5. alex-try

    alex-try Активный пользователь

    С нами с:
    7 апр 2011
    Сообщения:
    11
    Симпатии:
    0
    Кэш сбрасывал.

    Заголовки с Денвера, и с сервера в интернете:
    (Сафари не показывает результат ни оттуда ни оттуда)
    [css]
    From Denver
    Array (
    [0] => HTTP/1.1 200 OK
    [1] => Date: Thu, 07 Apr 2011 13:18:34 GMT
    [2] => Server: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k PHP/5.2.12
    [3] => X-Powered-By: PHP/5.2.12
    [4] => Content-Length: 657
    [5] => Connection: close
    [6] => Content-Type: text/html; charset=windows-1251
    )

    From server
    Array (
    [0] => HTTP/1.1 200 OK
    [1] => Date: Thu, 07 Apr 2011 13:22:05 GMT
    [2] => Server: Apache
    [3] => X-Powered-By: PHP/5.3.5
    [4] => Connection: close
    [5] => Content-Type: text/html
    )
    [/css]

    Проблема именно с отображением этого конкретного js-слайдера, именно в Сафари, и именно когда код приходит из PHP.

    P.S. Сейчас хочу еще прогнать POST запрос с другим js-кодом, может это связано или в общем с JS или конкретно с этой библиотекой. Такое впечатление что он не выполняет js скрипт, если он из PHP пришел.
     
  6. alex-try

    alex-try Активный пользователь

    С нами с:
    7 апр 2011
    Сообщения:
    11
    Симпатии:
    0
    Поменял галерею на другую, то же самое. Все браузеры показывают, Сафари не показывает. Делаю статическую HTML страницу с этой же jQuery галереей - показывает. Получается Сафари не выполняет Javascript если он пришел в коде PHP страницы?

    Упростил экперимент, передаю в POST запросе всего один элемент
    HTML:
    1. <script type="text/javascript">alert("Eto ja - JavaScript!");</script>
    Все браузеры алёрт показывают, но не Сафари. Т.е. факт налицо - Сафари не выполняет скрипты полученные из PHP. Только вот почему?
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    может он у тебя конкретно выключен в этом браузере? =)
     
  8. alex-try

    alex-try Активный пользователь

    С нами с:
    7 апр 2011
    Сообщения:
    11
    Симпатии:
    0
    JavaScript включен.

    Вот этот php файл работает в Сафари следующим образом - первый скрипт, к-рый записан вручную в коде страницы, срабатывает, а второй такой же, к-рый приходит через POST и выводится с помощью echo $postedValue;, ни хрена не срабатывает, хотя в исходном коде полученной от сервера страницы он есть, его можно увидеть с помощью Вид>Просмотреть HTML код, и он не содержит синтаксических ошибок. Во всех других браузерах оба скрипта срабатывают. На Маке такое же поведение у Сафари.
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4.     <title>Preview</title>
    5.     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    6.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    7. </head>
    8. <body>
    9. <script type="text/javascript">alert("Это скрипт внутри body.");</script>
    10. <?php
    11. if ( isset( $_POST ) )
    12.     $postArray = &$_POST ;          // 4.1.0 or later, use $_POST
    13. else
    14.     $postArray = &$HTTP_POST_VARS ; // prior to 4.1.0, use HTTP_POST_VARS
    15. foreach ( $postArray as $sForm => $value ) {
    16.     if ( get_magic_quotes_gpc() )
    17.         $postedValue = stripslashes( $value );
    18.     else
    19.         $postedValue = $value ;
    20. echo $postedValue;
    21. }
    22. ?>
    23. </body>
    24. </html>
    Пробовал менять echo на print, результат тот же самый.
     
  9. alex-try

    alex-try Активный пользователь

    С нами с:
    7 апр 2011
    Сообщения:
    11
    Симпатии:
    0
    Вот, до чего я дошел. Если вывести яваскрипт таким образом
    PHP:
    1.     $testValue = '<script type="text/javascript">alert("Это скрипт из php.");</script>';
    2.     echo $testValue; // срабатывает
    он срабатывает в Сафари (в других браузерах само собой, с ними вообще проблем не было).

    Но если этот яваскрипт был получен через POST, Сафари как-то чувствует его, как-то отличает от других, и не выполняет. Хотя при просмотре кода страницы (в браузере) никакой разницы в скриптах нет, они идентичны, просто один выполняется, а другой нет. Как такое может быть? Что такого добавляет POST, что Сафари это видит, но для человека визуальной разницы нет?
     
  10. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    Попытайтесь забудыть про POST. Для браузера нет разницы - для него есть только HTML.

    Смотрите на то, чем отличаются HTML-и. Внимательно смотрите. Пробелы, слеши... мало ли что.

    А как ты пост отправляешь?
     
  11. alex-try

    alex-try Активный пользователь

    С нами с:
    7 апр 2011
    Сообщения:
    11
    Симпатии:
    0
    POST отправляет код HTML-редактора, я просто метод вызываю для этого. Но я просматривал содержимое запроса, и ответ просматривал, все нормально. Сейчас еще хочу попробовать вручную простейший POST отправить в этот же скрипт и посмотреть разницу.

    Кстати, если сохранить в файл исходный код страницы из Сафари, дать ему расширение html, из в этом же Сафари запустить, то проблеммный js-код сработает. Это к вопросу что нет разницы, и главное HTML. Значит все таки есть разница.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    барабахи

    кто тут говорил, что барабах нет? вот они
     
    askanim нравится это.
  13. alex-try

    alex-try Активный пользователь

    С нами с:
    7 апр 2011
    Сообщения:
    11
    Симпатии:
    0
    Точно барабашки. Вот я упростил предельно, все лишнее выкинул. Посылаю из формы с одним полем
    HTML:
    1.  
    2. <form action="preview-test.php" method="post">
    3.     <input type="text" name="firstname" style="width:300px;" value="" />
    4.     <input type="submit" value="Submit" />
    5. </form>
    6.  
    POST запрос в ниже приведенный PHP скрипт (HTML обертку я здесь опустил, она есть в постах выше в этой теме)
    PHP:
    1.  
    2. <?php
    3. if ( isset( $_POST ) )
    4.     $postArray = &$_POST ;          // 4.1.0 or later, use $_POST
    5. else
    6.     $postArray = &$HTTP_POST_VARS ; // prior to 4.1.0, use HTTP_POST_VARS
    7. foreach ( $postArray as $sForm => $value ) {
    8.     if ( get_magic_quotes_gpc() )
    9.         $postedValue = stripslashes( $value );
    10.     else
    11.         $postedValue = $value ;
    12.     echo $postedValue;
    13. }
    14. ?>
    15.  
    в поле формы вписываю следующий текст: <script type="text/javascript">alert('Script from POST!');</script> и нажимаю Submit. POST запрос уходит, PHP обрабатывает и возвращает страницу. Все браузеры мне показывают алёрт - "Это скрипт из POST!", Сафари мне показывает красивую белую страницу и всё. Скрипт, к-рый пришел через POST, не выполняется. Вот такие барабашки живут в браузере Сафари.

    У кого есть Сафари попробуйте пожалуйста этот пример http://mutaborsoft.com/post.html, появится ли у вас алёрт при загрузке страницы-ответа.
    Это скопируйте в поле:
    <script type="text/javascript">alert('Script from POST!');</script>
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    какиенить маджик квотес ?
     
  15. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    alex-try
    попробуй отправлять также и заголовки
    header("Content-type: text/html");

    по коду:
    зачем проверки на версию пхп ниже 4 ? например, у меня скрипт выводит сообщение о том, что требуется пхп 5 и умирает, если версия пхп меньше 5-ой.

    а ещё проверка get_magic_quotes_gpc() - обычно в самое начало скрипта включается проверка, которая автоматом исправляет $_GET, $_POST от лишних слешей при установленых магических кавычках.
     
  16. alex-try

    alex-try Активный пользователь

    С нами с:
    7 апр 2011
    Сообщения:
    11
    Симпатии:
    0
    Спасибо за поправки, я просто недавно с PHP работаю, еще не освоился, код этот я скопировал из примеров к CKEditor.

    Что касается проблемы, у меня есть еще такая версия что это зависит от версии Safari. Я проверял на 5.0.2 на винде, и 5.0.3 на маке.
     
  17. alex-try

    alex-try Активный пользователь

    С нами с:
    7 апр 2011
    Сообщения:
    11
    Симпатии:
    0
    Добил я его таки. Дело оказалось в версии Safari. После установки Safari 4-ой версии все заработало.

    Так что Safari 5 имеет такой вот неприятный баг.
     
  18. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    header("X-XSS-Protection: 0");
    Поставьте это в начало preview-test.php
     
  19. alex-try

    alex-try Активный пользователь

    С нами с:
    7 апр 2011
    Сообщения:
    11
    Симпатии:
    0
    Это снятие защиты от скриптов? Тогда я думаю это не решит проблему. Я уже убедился, что другие скрипты в этом же документе выполняются без проблем, как же защита может это допускать? Тогда они все не выполнялись бы. Хотя, когда обратно пятую версию установлю, попробую.

    А куда именно в начало добавить, так что-ли?
    HTML:
    1.  
    2. header("X-XSS-Protection: 0");
    3. <!DOCTYPE html>
    4. ...
    5.  
     
  20. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    <?php
    header("X-XSS-Protection: 0");
    ?>
    <!DOCTYPE html>
    ...
    Вот так
    Это защита от XSS. Браузер видит, что скрипт на странице совпадает с тем, что ушел от него через запрос и блокирует.
    Зашита реализована в вебките (сафари, хром), и вроде как в последнем ИЕ даже.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    MiksIr
    нифига себе...
     
  22. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    MiksIr, т.е. в этом случае я не смогу изменять поведение js на лету, я верно понимаю?
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    titch
    а хочешь формировать скрипт в браузере и самому себе его присылать чтобы выполнить? =)
     
  24. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Иногда, чтобы обойтись без флагов и уменьшить размер первой страницы (вместе со скриптами), нужно заменять на лету один js на другой. Это нормально, имхо. Не вижу ничего плохого. В графике это выглядит, как если бы пользователь переключил режим фортепианного синтезатора. Т.е. органы управления те же, а звучит по новому.
     
  25. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    Ну ты же этот скрипт не постом/гетом отправляешь себе?