我通过javascript调用goolge earth api函数'fetchKml'。当获取大文件时,firefox会给我一个弹出窗口,上面写着“此页面上的脚本可能正忙,或者它可能已停止响应。您可以立即停止脚本,在调试器中打开脚本,或让脚本继续运行。” / p>
我注意到谷歌组问题331上的类似问题('fetchKml在较慢的连接或快速连接和大型KML / KMZ文件'上失败)。唉 - 这个问题发生在2009年。现在是2012年。如何在没有出现超时问题的情况下逐步获取文件?
谢谢。
答案 0 :(得分:1)
根本原因是fetchKml是同步的。它将阻塞,直到通过网络获取KML文件,进行解析,并将其指定的内容加载到插件中。如果这些步骤中的任何一个花费太长时间(服务器响应缓慢,文件非常大,内容过于复杂),因此函数调用时间太长,它会在浏览器中触发慢速脚本警告,这通常只是触发基于时间的简单监视器循环。
有几种方法可以解决这个问题:
最简单的方法是将内容分成几个单独的内容
KML文件并加载每个文件,可能会产生setTimeout
在每个fetchKml()
电话之间。如果您的主要问题是,这将无济于事
延迟,但既然你说这是大型KML文件发生的,
这可能不是这种情况。
惯用法是在KML中使用NetworkLinks加载
这些其他文件。第一个fetchKml
调用将是同步的,但是
然后(取决于update mechanism is set)后续的方式
内容将由插件在其自己的时间加载,而不是
阻止javascript执行线程。
最后,有把握事情进入你自己的方式。您可以
使用浏览器的本机XMLHttpRequest
功能加载KML
file,默认是异步的。当文件加载时,你的
回调函数会被通知,然后你可以使用
parseKml()在插件中加载该文件并显示其中
内容。请注意parseKml
也是同步的,因此它会阻止
正在解析文件并创建内容,但通常
与下载文件相比,这是一个非常快的步骤
第一名。