document.write('Test.');
while (true) 1;
我希望浏览器首先显示文本,然后跳转到无限循环。但我没有看到任何文字。如何强制浏览器逐行进行?我正在寻找一个简单的函数,告诉浏览器等待第一行完成。有这样的事吗?像waitForEverythingToFinish()
一样。就像使用window.getComputedStyle(div).getPropertyValue('height')
强制重绘一样。
答案 0 :(得分:1)
我认为根据您的评论,这个问题的实质是,您希望确保浏览器有时间更新屏幕,然后启动长时间运行的同步< / em>任务。浏览器会尽可能更新屏幕,因此如果您阻止主线程,则无法获得刷新的UI。这可以通过简单的超时或评论建议requestAnimationFrame
。
简单超时:
// For example, document.write(...)
funcThatChangesScreen();
setTimeout(function () {
// For example, lots of heavy calculations
synchronousFuncThatTakesALongTime();
}, 100);
JSFiddle比较:
或者,请参阅requestAnimationFrame。
编辑:正如评论中的其他人所指出的那样,这并不是真正获得所需内容的最佳方式,即使它确实有效。如果您有长时间运行的同步任务,最好将其委派给WebWorker或使其异步。这个超时解决方案将允许用户在屏幕上看到文本,但它仍然会阻止UI,就像上面的JSFiddles一样。
答案 1 :(得分:-1)
看看这是否适用于您的目的?
if(!document.write('Test.')){
while (true) 1;
}