Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...

Не работает iframe ... От слова совсем! Что за магия?

Какая-то магия... Клиенты попросили виджет моего сервиса oknardia.ru ... Чтобы сделать все быстро и не городить огород, решил все сделать с помощью <iframe>, а с асинхронными JS заморочиться позже. Веб-разработкой давно не занимался, забросил лет 15 назад и вернулся к сайтостроению год назад. Но помнил, что никаких проблем с iframe не было, и потому не предвидел проблем и сейчас. Создал себе сайтик для отладки виджета: widget.oknardia.ru. В нем прописано:

<iframe seamless src="http://oknardia.ru/widget/id_2" name="oknardia" width="100%">
    Если бы ваш браузер не поддерживал iframe, тут был бы виджет!
</iframe>

И, бац! А оказалось, такая простая штука, не работает. Причем, вижу в логах, что обращения к /widget/id_2 проходят, и сервер отдает все чин по чину с кодом 200.

Возможно, все дело в настройках безопасности браузера, но все браузеры отрабатывают одинаково.

Для примера вставил еще один <iframe> с внешних сайтов. Некоторые сайты показывает, некоторые нет. Например, iframe, подгружающий что-то с toster, отрабатывается. Такое впечатление, что что-то в самом HTML-контенте для фрейма не то. Что изменилось в концепции iframe за последние 15 лет? Что надо "сказать" в HTML для фейма чтобы он заработал?

Кстати, и почему атрибут seamless не работает как положено? Он же должен, кроме прочего, обеспечивать, что "высота формируется автоматически на основе содержимого". Для фрейма с подгрузкой с toster.ru это не обеспечивается. Это вообще работает?
  • Вопрос задан
  • 12258 просмотров
Решения вопроса 2
alsopub
@alsopub
Сервер отдает заголовок, запрещающий показ во фреймах на чужом домене.
X-Frame-Options: SAMEORIGIN
Ответ написан
edli007
@edli007
full stack, team lead
Не отображается думаю из-за заголовка
X-Frame-Options:SAMEORIGIN

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

а seamless не кросбраузерный пока, да и высота фрейма в нутри которого скрипты, понятие весьма растяжимое в буквальном смысле.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы