2012-07-19 63 views
2

我通过javascript调用goolge earth api函数'fetchKml'。当抓取大文件时,firefox会弹出一个窗口,提示“此页面上的脚本可能很忙,或者它可能已停止响应,现在可以停止脚本,在调试器中打开脚本,或让脚本继续。google earth fetchKml timeout

我注意到谷歌组问题331('fetchKml失败,在较慢的连接或快速连接和大型KML/KMZ文件')上的类似问题。那么可惜 - 这个问题是在2009年。现在是2012年。我如何在没有超时问题的情况下按程序加载文件?

谢谢。

+0

您可以尝试使用KmlNetworkLinks重写您的kml/kmz文件。在地球上显示之前,您无法通过网络链接来操作kml,但它的速度非常快并且体积最小。 https://developers.google.com/earth/articles/earthapikml – Matt 2012-07-27 20:22:02

回答

1

根本原因是fetchKml是同步的。它将阻塞,直到KML文件通过网络获取,解析,并且它指定的内容被加载到插件中。如果这些步骤中的任何一个花费太长时间(服务器响应缓慢,文件非常大,内容过于复杂),所以函数调用需要很长时间,它会在浏览器中跳过缓慢的脚本警告,通常只是触发一个简单的基于时间的看门狗循环。

有解决这几个方面:

  • 最简单的方法是将你的内容分成几个独立的 KML文件并加载他们每个人,也许有setTimeout每间 产生致电fetchKml()。如果您的主要问题是延迟 ,这将无济于事,但由于您说这发生在大型KML文件 中,因此可能并非如此。

  • 惯用的方法是在您的KML中使用NetworkLinks加载 这些其他文件。第一个fetchKml调用将是同步的,但 然后(取决于update mechanism is set)后续 内容将由插件在其自己的时间加载,而不是 阻止JavaScript执行线程。

  • 最后,还有一个手把手的事情。您可以使用 浏览器的本地XMLHttpRequest功能来加载KML 文件,该文件在默认情况下是异步的。加载文件时,将会通知您的回调函数,然后您可以使用 parseKml()在插件中加载该文件并显示其内容 。请注意,parseKml也是同步的,所以在分析文件和创建内容时将阻止 ,但通常是 ,与首先下载 中的文件相比,这是非常快的步骤。

相关问题