JQuery/iframe не работает в Chrome
Я создал страницу поклонника facebook здесь:
http://www.facebook.com/apps/application.php?id=120196931351044&v=app_120196931351044
Он включает iframe для вызова определенных страниц/галерей изображений, которые используют jquery. Все работает отлично во всех браузерах, кроме Chrome. Ничего не отображается в Chrome из фреймов, просто пустой белый фон.
Я попытался использовать load
событие вместо обработчика ready
, но все равно не повезло.
Кто-нибудь видел подобную проблему в хроме?
Ваша помощь будет принята с благодарностью.
Большие изображения в заголовке поступают через iframe, страницу, включающую jquery.
Update:
Как показано в комментариях ниже, он, похоже, не работает даже в Safari.
Обновление 2
Такой же код работает в chrome при запуске за пределами iframe, вот ссылка
на рабочую страницу:
http://jsbin.com/esame4/4
Обновление 3:
Кажется, что эта проблема сохраняется в chrome при использовании iframe, как можно увидеть здесь:
http://www.google.am/support/forum/p/Chrome/thread?tid=2c81c3e3fd99b388&hl=en
http://forums.sharethis.com/topic.php?id=2742
Ответы
Ответ 1
Решение на самом деле простое. Чтобы ваш материал iframe отображался хорошо в Chrome, когда вы видите страницу/приложение Facebook, вы должны вызывать контент или свойства с защищенного сервера.
Вы ДОЛЖНЫ обеспечить, чтобы все необходимые файлы и папки, такие как файлы CSS, JS и изображений, находились в защищенной папке.
-
Для этого вам нужен сертификат SSL для вашего домена.
-
Измените условие htaccess и условия перезаписи мод, чтобы принудительно использовать SSL для всех или определенных папок, особенно когда вы используете переменные для вызова файлов. Если вы используете абсолютный URL-адрес, измените их на https.
Надеюсь, это поможет!
Ответ 2
Если проблема с document.ready не будет вызвана в iframe, потому что страница уже загружена в этот момент, возможно ли вместо этого разместить javascript, который вы хотите загрузить в нижней части новой страницы, а не в document.ready, чтобы он загрузился, как только все остальное было загружено?
Я сделал что-то подобное на некоторых страницах, например, поместил немного javascript в верхней части страницы, чтобы показать загрузочное изображение, а еще один кусок внизу, чтобы скрыть его и т.д.
<html>
<head><script>function pop(){alert("Page Loaded");}</script></head>
<body>Lorum ipsum...</body>
<script>pop();</script>
</html>
Ответ 3
Несколько предложений, в основном связанных с настройкой Javascript на странице gallery.php:
Мой первый инстинкт - сказать об ошибке (или даже предполагаемом ответе) в том, как Chrome/WebKit обрабатывает межсайтовые скрипты и другие подобные потенциальные дыры в безопасности. Я знаю, что некоторые дыры в безопасности включают запуск script изнутри iframe (как о котором упоминается в предыдущей ошибке Chrome).
Возможно, это связано с тем, что вы ссылаетесь на свой jquery.min.js с ajax.googleapis.com вместо того, чтобы размещать его в том же домене, что и на странице gallery.php. Попробуйте поместить копию jquery.min.js на свой сервер и привязать к ней и посмотреть, помогает ли она.
Кроме того, попробуйте переместить свой тег jQuery library <link>
в свой тег <head>
, как более подходящее для него место.
Вы также можете попробовать использовать библиотеку jQuery Innerfade для запуска вашего вращающегося баннера. Он очистит ваш script и, кто знает, возможно, убедит браузер, что вы не пытаетесь использовать дыру в безопасности.
Если вы не можете переключиться на использование Innerfade, по крайней мере, измените переменные JavaScript, чтобы не быть названным с помощью $(например, измените переменную "curbox" на "curbox" ). Это может еще больше раскрыть любую путаницу, которую браузер может иметь с вашим Javascript. По крайней мере, это хорошая практика, особенно при использовании jQuery.
Ответ 4
Привет, sAc, я пробовал его в Chrome 5.0.375.86, и он сработал. Поскольку сафари и хром используют один и тот же веб-движок (webkit), он может наследовать ту же проблему. Поскольку это проблема javascript, и теперь chrome использует javascript engine google V8 вместо JavaScriptCore (по умолчанию javascript engine от webkit), эта проблема, похоже, решена в последних версиях Chrome. Возможно, это может быть проблема с JavaScriptCore, не отправляя готовые или загружаемые события, поскольку DOM уже загружен в документ до того, как был создан iframe. Временному решению может быть установлен флаг, чтобы проверить, было ли содержимое инициализировано. Поставьте таймер от 5 до 10 секунд с помощью setTimeOut, чтобы проверить этот флаг. Если он не инициализирован, тогда вызовите его на обратном вызове setTimeOut. Поэтому, если сафари не вызывает загрузку или готовые события, setTimeOut может сделать это за вас. Конечно, не помещайте его в свой jquery-слой. Поместите его как чистый тег javascript внутри вашего HTML, который будет загружен iFrame.
Ответ 5
Проверьте заголовки ответов на странице, которую вы пытаетесь ввести в iframe
. Вы ищете заголовок x-frame-options.
Это новый параметр безопасности, который указывает браузеру не загружать содержимое фрейма. Многие веб-серверы добавят его по умолчанию.
Это что-то стоит проверить.
Ответ 6
Причина неработоспособности заключается в том, что браузер помечен как iframe как ненадежный.
Чтобы исправить это, просто добавьте кодировку в начало страницы, которую вы хотите отобразить:
< head ><br/>
< meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/><br/>
< /head><br/>