Почему я не могу получить доступ к документу iframe с установленными атрибутами src или srcdoc?

<html>
    <body>
    <!-- <iframe id = "iff" srcdoc = "<div>ok</div>"></iframe> -->
    <iframe id = "iff" src = "data:text/html;charset=utf-8,%3Cdiv%3Eok%3C%2Fdiv%3E"></iframe>
    <script>
        console.info(document.getElementById('iff').contentWindow.document)
    </script>
    </body>
</html>
  1. Я установил srcdoc (также пробовал src) <iframe>, но не могу получить доступ к реальному документу iframe (также пытался iframeElement.contentDocument). Выходы Chrome (также пробовал Firefox): Почему я не могу получить доступ к документу iframe с установленными атрибутами src или srcdoc?

Я вижу в Получить документ IFrame из JavaScript в основном документе, что не могу получить документ междоменного iframe, а также узнал из В чем разница между srcdoc = "..." и src = "data:text/html,..." в <iframe>?, что src и srcdoc ведут себя по-разному в отношении междоменного поведения. Но я пробовал оба, ни один не работает.

2. Когда я добавляю дочерний элемент в тело документа iframe (с установленным атрибутом src), DOM обновляется, но не отображается на экране.

То, что в консоли, не то, что на самом деле с DOM в отношении фреймов.

zer00ne 15.03.2019 17:24

@ zer00ne, но я также не могу манипулировать DOM iframe (с установленным src), например appendChild

lsdsjy 17.03.2019 07:19

Если у вас есть iframe с srcdoc и вы хотите перенести содержимое из него на родительскую страницу, используйте importNode() для копирования или adoptNode() для перемещения.

zer00ne 17.03.2019 09:38

@ zer00ne Ну, это может сработать, спасибо! Но мне все же интересно, есть ли объяснение такому поведению в документах W3C?

lsdsjy 18.03.2019 12:48

Конфликты, с которыми вы сталкиваетесь, возникают из-за множества мер безопасности, сама среда, в которой вы тестируете, определяет поведение, отличное от следующего. Не верьте тому, что вам показывают инструменты разработчика, когда речь идет о доступе к iframe, это будет ЛОЖЬ

zer00ne 18.03.2019 12:56

Теперь это имеет смысл. Большое спасибо!

lsdsjy 19.03.2019 16:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
663
1

Ответы 1

Попробуйте что-то вроде:

window.frames['iff'].document.myvar;

Это может быть полезно, если вы ищете iframe с URL-адресом:

var x=getIframeID("cool.php");
x.contentWindow.callafunction();

function getIframeID(iframeurl) {
    var iFs = top.document.getElementsByTagName('iframe');
    var x, i = iFs.length;
    while ( i-- ){
        x = iFs[i];
        if (iframeurl.indexOf(x.src)>=0) return (x.id);
        if (x.src == iframeurl)         return (x.id);
    }
    return("");
}

Другие вопросы по теме