Я хотел бы знать, если есть альтернатива iFrames с HTML5. Под этим я подразумеваю возможность внедрять междоменный HTML внутри веб-страницы без использования iFrame.
197
В основном есть 4 способа встраивания HTML в веб-страницу:
<iframe>
Содержимое iframe полностью находится в отдельном контексте, чем ваша страница. Хотя это в основном отличная функция и она наиболее совместима между версиями браузера, она создает дополнительные проблемы (сжатие размера фрейма для его содержимого является сложным, безумно неприятным для сценария в / из, почти невозможно стилизовать).XMLHttpRequest
объект для извлечения данных и внедрения их на свою страницу. Это не идеально, потому что это зависит от методов написания сценариев, что делает выполнение медленнее и сложнее среди других недостатков .HTML5 веб-компоненты . HTML Imports, часть веб-компонентов, позволяет объединять HTML-документы в другие HTML-документы. Это включает в себя HTML
, CSS
, JavaScript
или что - нибудь еще .html
файл может содержать. Это делает его отличным решением со многими интересными вариантами использования: разбить приложение на связанные компоненты, которые можно распределять как строительные блоки, лучше управлять зависимостями, чтобы избежать избыточности, организовать код и т. Д. Вот тривиальный пример:
<!-- Resources on other origins must be CORS-enabled. -->
<link rel="import" href="http://example.com/elements.html">
Собственная совместимость по-прежнему остается проблемой, но вы можете использовать polyfill, чтобы она работала в вечнозеленых браузерах .
Вы можете использовать объект и вставлять, вот так:
Что не ново, но все еще работает. Я не уверен, что он имеет такую же функциональность, хотя.
источник
Нет, не существует эквивалента.
<iframe>
Элемент остается в силе в HTML5. В зависимости от того, какое именно взаимодействие вам нужно, могут быть разные API. Например, естьpostMessage
метод, который позволяет вам достичь междоменного взаимодействия с JavaScript. Но если вы хотите отобразить междоменное содержимое HTML (стилизованное с помощью CSS и сделанное интерактивным с помощью JavaScript), этоiframe
остается хорошим способом сделать это.источник
object
это простая альтернатива в HTML5:Вы также можете попробовать
embed
:источник
Если вы хотите сделать это и контролировать сервер, с которого обслуживается базовая страница или контент, вы можете использовать Cross Origin Resource Sharing ( http://www.w3.org/TR/access-control/ ), чтобы разрешить клиенту боковой JavaScript для загрузки данных в
<div>
viaXMLHttpRequest()
:Теперь для стержня всей этой операции вам нужно написать код для вашего сервера, который даст клиентам
Access-Control-Allow-Origin
заголовок, указывающий, к каким доменам вы хотите, чтобы клиентский код имел доступ черезXMLHttpRequest()
. Ниже приведен пример кода PHP, который вы можете включить в верхней части своей страницы для отправки этих заголовков клиентам:источник
Это также, кажется, работает, хотя W3C указывает, что оно не предназначено «для внешнего (обычно не HTML) приложения или интерактивного контента»
Дополнительная информация: http://www.w3.org/wiki/HTML/Elements/embed http://www.w3schools.com/tags/tag_embed.asp
источник
Iframe по-прежнему является лучшим способом загрузки междоменного визуального контента. С AJAX вы, безусловно, можете скачать HTML-код с веб-страницы и вставить его в div (как уже упоминали другие), однако большая проблема заключается в безопасности. С помощью iframes вы сможете загружать междоменный контент, но не сможете манипулировать им, поскольку контент на самом деле не принадлежит вам. С другой стороны, с AJAX вы, безусловно, можете манипулировать любым контентом, который вы можете загрузить, но сервер другого домена должен быть настроен таким образом, чтобы вы могли начать его загрузку. Много раз у вас не будет доступа к конфигурации другого домена, и даже если вы сделаете это, если вы не выполняете такую конфигурацию постоянно, это может быть головной болью. В этом случае iframe может быть намного более простой альтернативой.
Как уже упоминали другие, вы также можете использовать тег embed и тег object, но он не обязательно более продвинутый или более новый, чем iframe.
HTML5 пошел в направлении принятия веб-API для получения информации из разных доменов. Обычно веб-API просто возвращают данные, а не HTML.
источник
nice-to-know
Вы можете использовать XMLHttpRequest для загрузки страницы в div (или любой другой элемент вашей страницы на самом деле). Примерная функция будет:
Если ваш сервер способен, вы также можете использовать PHP для этого, но так как вы запрашиваете метод HTML5, это должно быть все, что вам нужно.
источник
Я создал модуль узла, чтобы решить эту проблему замена узла iframe . Вы предоставляете исходный URL родительского сайта и селектор CSS, чтобы вставить ваш контент, и он объединяет их вместе.
Изменения на родительском сайте забираются каждые 5 минут.
Источник содержит рабочий пример внедрения контента на домашнюю страницу BBC News .
источник
Вы должны взглянуть на JSON-P - это было идеальное решение для меня, когда у меня была такая проблема:
https://en.wikipedia.org/wiki/JSONP
Вы в основном определяете файл javascript, который загружает все ваши данные, и другой файл javascript, который обрабатывает и отображает его. Это избавляет от уродливой полосы прокрутки в фреймах.
источник