我正在处理的基于JavaScript的游戏的代码使用appendChild()将文本元素添加到内容区域,向玩家显示信息。然后,它会弹出一个提示符()对话框,从播放器中请求其他信息。
最简单的形式如下:
var content = document.getElementById("content");
var tval = document.createElement("nstring");
tval.innerHTML = "Example text";
content.appendChild(tval);
prompt("Do you see the example text?","");
在IE 8 +,Chrome和Firefox下运行时,这可以正常工作。显示信息文本,然后显示提示对话框。
但在Safari下,添加到内容区域的文本元素直到 之后,播放器在提示对话框中单击“确定”或“取消”才会显示。 (一个区别:在桌面Safari中,在取消提示后显示文本;在移动Safari中,会显示提示,但屏幕文本从不显示,直到整个游戏结束。)无法在台式机或iPhone / iPad Safari浏览器中玩游戏。
我创建了一个jsfiddle来演示这个:http://jsfiddle.net/5CQXU/7/。加载小提琴,在初始提示中单击“确定”或“取消”,然后按小提琴的“结果”窗格中的“清除屏幕”按钮。
当您使用IE,Chrome和Firefox运行小提琴时,在显示提示()对话框之前,所有“之前”文本行都会在“结果”窗格中正确显示。只有在单击“确定”或“取消”以取消提示对话框后,才会显示“后”文本行。
然后在Safari中运行小提琴,文本行的 none - “之前”或“之后” - 将显示,直到提示对话框被删除,然后它们都显示了。
我的工作理论是,与IE,Chrome和Firefox不同,Safari会延迟屏幕写入,直到所有I / O经过一段时间后才开始。然而,到目前为止,在SO或其他地方的搜索量没有发现任何类似的问题或答案。
我希望有人可以指点我进行适当的修改,告诉Safari(桌面和手机)立即显示文字元素。