Точный вопрос в том, как сделать это с чистым JavaScript, а не с jQuery.
Но я всегда использую решение, которое можно найти в исходном коде jQuery.
Это всего лишь одна строка нативного JavaScript.
Для меня это лучший, легко читаемый и даже afaik самый короткий способ получить контент iframes.
Сначала получите свой iframe
var iframe = document.getElementById('id_description_iframe');
// or
var iframe = document.querySelector('#id_description_iframe');
А затем используйте решение jQuery
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
Это работает даже в Internet Explorer, который делает этот трюк во время свойства contentWindow
объекта iframe
. В большинстве других браузеров используется свойство contentDocument
, и именно поэтому мы сначала проверяем это свойство в этом условии ИЛИ. Если он не установлен, попробуйте contentWindow.document
.
Выбор элементов в iframe
Тогда вы обычно можете использовать getElementById()
или даже querySelectorAll()
, чтобы выбрать элемент DOM из iframeDocument
:
if (!iframeDocument) {
throw "iframe couldn't be found in DOM.";
}
var iframeContent = iframeDocument.getElementById('frameBody');
// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
Вызов функций в iframe
Получите только элемент window
из iframe
для вызова некоторых глобальных функций, переменных или целых библиотек (например, jQuery
):
var iframeWindow = iframe.contentWindow;
// you can even call jQuery or other frameworks
// if it is loaded inside the iframe
iframeContent = iframeWindow.jQuery('#frameBody');
// or
iframeContent = iframeWindow.$('#frameBody');
// or even use any other global variable
iframeWindow.myVar = window.myVar;
// or call a global function
var myVar = iframeWindow.myFunction(param1 /*, ... */);
Примечание
Все это возможно, если вы соблюдаете политику того же происхождения .