在 iOS9 下打开的 window 中使用 document.write

Using document.write in an opened window under iOS9

升级到 iOS 9 后,我们最近在 iPad 代码中遇到了一个问题。出于各种原因,我们打开一个空的 window 并在它可用后开始写入文档。这通常工作正常,我们针对不同的浏览器行为等进行了各种测试,但 iOS 中的新问题似乎有问题。

当您用 window.open 打开一个新的 window 时,返回的引用立即有一个文档并且使用文档写入工作没有错误。您可以检查内容等。一切正常。 然后 iOS 决定用新文档替换该文档。由于我们首先设法成功写入,因此我们不会尝试再次写入,因此用户会看到一个空白页面。 写入新文档按预期工作,并且实际显示给用户。只是随机检查文档是否已更改或检测用户代理似乎是一个 hacky 解决方案,所以问题是:

是否有更好的方法来处理此问题(任何被触发的事件)documents/window 引用的任何差异以进行检查。或者有人知道为什么 iOS9 这样做吗?

这是一个带有 working/not 工作代码的代码笔 iOS 9 http://codepen.io/anon/pen/epapGL

    function openWindow(twice) {
        win = window.open('about:blank', '_blank', 'width=500,height=700');
        if (win.document) {
            originalDocument = win.document;
            win.document.write('<div>This should appear in the opened window.</div>');
            noticeDiv.innerHTML = 'First write successful';
        }
        if (twice) {
            setTimeout(writeAgain, 0);
        }
    }

    function writeAgain() {
        if (win.document !== originalDocument) {
            win.document.write('<div>This is the second try. The document was replaced.</div>');
            noticeDiv.innerHTML = 'Second write successful';
        }
    }

编辑:这不是关于添加一般内容,而是关于 iOS 9 特定行为。

编辑 2:我现在已经为此向 Apple 提交了错误报告。我看看他们怎么说。

我发现了类似的东西。 这个问题的解决方案似乎是修改这个:

win = window.open('', '_blank', 'width=500,height=700');

这意味着,省略 'about:blank',将其留空。 也适用于 codepen 上的代码示例。

不知道为什么,编程能力有限。但我在一些论坛软件上遇到了同样的问题,并设法查明原因。

干杯, 托马斯