window.stop()停止当前加载图像,但加载新图像

时间:2016-07-11 14:50:07

标签: javascript

我有一个脚本,根据某些事件(用户交互,setTimeout),加载一个JSON,并使用JSON的结果加载一堆图像。我还根据用户与页面的交互预加载了一些图像。有时,在页面打开一段时间后,从JSON加载的图像开始“减速”,需要更多时间加载(如果我刷新页面,它们加载正常)。所以我开始寻找一种方法来中止当前加载的图像,并遇到了“window.stop()”。我在规范中阅读了MDN amd中的描述,并且无法理解这是否是我正在寻找的。

MDN has

  

stop()方法完全等同于单击中的停止按钮   浏览器。由于脚本的加载顺序,   stop()方法无法停止包含它的文档   加载,但它会停止加载大图像,新窗口,   和其他加载延期的对象。

The spec

  

如果存在,则Window对象上的stop()方法应该是   尝试浏览浏览上下文而该尝试不是   当前正在运行卸载文档算法,取消它   导航;然后,它必须中止浏览的活动文档   调用它的Window对象的上下文。

abort a document

  

...在此上下文中取消任何获取算法的实例   记录,丢弃任何排队等待的任务,并丢弃任何任务   从网络收到的更多数据......

这是否意味着在使用window.stop()之后我无法再加载任何图像?我做了一些测试,在Firefox,Chrome和Safari上,这似乎有效(在window.stop之后加载图像),但这似乎与规范相矛盾。

window.stop();
document.getElementById("c").innerHTML = "<img src='http://a5.mzstatic.com/us/r30/Purple5/v4/5a/2e/e9/5a2ee9b3-8f0e-4f8b-4043-dd3e3ea29766/icon128-2x.png'/>";
<div id="c"></div>

我是否误读了规范,使用这种代码是安全的,还是应该尝试以不同的方式进行?

2 个答案:

答案 0 :(得分:0)

这是同步呼叫。在您的代码中,window.stop()运行,然后-加载新图像。规格也很好。.

document.getElementById("c").innerHTML = "<img src='//test.com/THIS_WILL_STOP_LOADING.png'/>";
window.stop();
document.getElementById("d").innerHTML = "<img src='//test.com/THIS_WILL_LOAD.png'/>";

答案 1 :(得分:-1)

你需要做

return window.stop();

因为已经加载了window.stop();的脚本,所以它将完成。

如果之后有另一个脚本,它将被停止,请查看示例:

&#13;
&#13;
<div id="c"></div>
<script>window.stop(); </script>
<script>document.getElementById("c").innerHTML = "<img src='http://a5.mzstatic.com/us/r30/Purple5/v4/5a/2e/e9/5a2ee9b3-8f0e-4f8b-4043-dd3e3ea29766/icon128-2x.png'/>";</script>
&#13;
&#13;
&#13;