@john_bob

Как обойти ошибку Permission Denied в IE11?

Я получаю ошибку «Permission Denied» в Edge и IE при создании iframe в скрипте с некоторой задержкой (setTimeout) и попытке доступиться к объекту window.

Это работает во всех других браузерах и работает без setTimeOut в IE и Edge.
<script>
    function createIframe(win) {
        console.log('foo', win.foo);
        var width = 300;
        var height = 250;
        var id = 'ifr';
        var src = '';
        var iframeTemplate = '<iframe id="'+id+'" src="'+src+'" width="'+width+'" height="'+
            height+'"  marginheight="0" marginwidth="0" scrolling="NO" frameborder="0"></iframe>';
        win.document.write(iframeTemplate);
        var iframe = win.document.getElementById(id);
        console.log('foo', win.foo);
        if (iframe) {
            var doc = iframe.contentWindow.document;
            doc.write('<html><head></head><body><script>console.log("foo on parent", window.parent.foo);</scr'+ 'ipt></body></html>');
            doc.close();
        } else {
            console.log('Failed to create an iframe');
        }
    }
    window.foo = 'bar';
    setTimeout(function() {
        createIframe(window);
    }, 3000);

</script>


В консоли должно быть:
foo bar
foo bar
foo on parent bar

Но он выдает ошибку «Permission Denied» на втором console.log в Edge и IE.
Не работает в Edge и IE: https://jsfiddle.net/vo2yrjft/
Работает на Edge и IE: https://jsfiddle.net/6cbfk1yr/

Что можете посоветовать?
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Absolute138
В EDGE работает.
<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <script>
            function createIframe(win) {
               var frame = document.createElement('iframe');
			   frame.width = 300;
			   frame.height = 300;
			   frame.id = 'ifr';
			   frame.src = '';
			   document.body.appendChild(frame);
               var script = document.createElement('script');
               script.innerHTML = 'console.log(window.parent.foo);';
               frame.contentWindow.document.head.appendChild(script)
            }
            window.foo = 'bar';
            setTimeout(function() {
                createIframe(window);
            }, 3000);
        </script>
    </body>
</html>
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Александрия Москва
от 200 000 до 250 000 руб.
Foodtronics Москва
от 100 000 до 200 000 руб.
Алгоритмика Москва
от 120 000 до 200 000 руб.
21 авг. 2019, в 14:20
15000 руб./за проект
21 авг. 2019, в 13:40
25000 руб./за проект