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



在升级到iOS 9后,我们最近在iPad的代码中遇到了一个问题。由于各种原因,我们打开一个空窗口,一旦文档可用,就开始写入文档。这通常很好,我们对不同的浏览器行为等进行了各种测试,但iOS中的新问题似乎有问题。

当你用window.open打开一个新窗口时,返回的引用立即有一个文档,使用document-write可以正常工作。你可以查看内容等,一切都正常。然后iOS决定用新文档替换该文档。由于我们一开始就成功地写了,所以我们不会再写了,这样用户就会看到一个空页面。写入到新文档中的操作符合预期,并且实际显示给用户。仅仅随机检查文档是否已更改或检测用户代理似乎是一个棘手的解决方案,所以问题是:

有没有更好的方法来处理这一点(任何事件都被触发)——要检查的文档/窗口引用上的任何差异。或者有人知道iOS9为什么这么做吗?

这是一个代码笔,包含适用于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:我现在已经打开了一个苹果的错误报告。我看看他们怎么说。

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

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

也就是说,省略"about:black",将其留空。也适用于代码笔上的代码示例。

我不知道为什么,而且我的编程技能有限。但我在一些论坛软件上也遇到了同样的问题,并设法将其归结为这个问题。

干杯,Thomas

最新更新