在 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 上的代码示例。
不知道为什么,编程能力有限。但我在一些论坛软件上遇到了同样的问题,并设法查明原因。
干杯,
托马斯
升级到 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 上的代码示例。
不知道为什么,编程能力有限。但我在一些论坛软件上遇到了同样的问题,并设法查明原因。
干杯, 托马斯