@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/

Что можете посоветовать?
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 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>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы