Edge中iframe中的几个document.write导致SCRIPT70:权限被拒绝

时间:2016-10-10 08:30:03

标签: javascript iframe microsoft-edge

导致错误的document.write SCRIPT70:如果在iframe中使用了一些document.write,则权限被拒绝。此错误仅在Edge中发生。在所有其他浏览器中,未观察到此错误。 例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SSP-558</title>
</head>
<body>
<script>
    document.write("1");
    document.write("2");
</script>
<script>
    var iframe = document.createElement("iframe");
    iframe.width = window.outerWidth;
    iframe.height = window.outerHeight;
    iframe.onload = function () {
        var doc = iframe.contentWindow.document;
        var script = doc.createElement("script");
        script.type = "text/javascript";
        script.text = [
            'document.write("1");',
            'document.write("2");'
        ].join("");

        doc.body.appendChild(script);
    };
    document.body.appendChild(iframe);
</script>
</body>
</html>

此代码将在页面和iframe中显示12,但会导致错误,并且在Edge中仅显示1个内部iframe。

如果您只使用一个document.write一切正常。不幸的是,包含多个document.write的代码来自第三方开发人员,他们无法更改它。

您是否遇到过此错误,是否有任何解决方案?

1 个答案:

答案 0 :(得分:4)

找到了解决方案。如果在document.write前添加窗口,则不会导致错误。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SSP-558</title>
</head>
<body>
<script>
    document.write("1");
    document.write("2");
</script>
<script>
    var iframe = document.createElement("iframe");
    iframe.width = window.outerWidth;
    iframe.height = window.outerHeight;
    iframe.onload = function () {
        var doc = iframe.contentWindow.document;
        var script = doc.createElement("script");
        script.type = "text/javascript";
        script.text = [
            'window.document.write("1");',
            'window.document.write("2");'
        ].join("");

        doc.body.appendChild(script);
    };
    document.body.appendChild(iframe);
</script>
</body>
</html>