2

我通过javascript调用goolge earth api函数'fetchKml'。获取大文件时,firefox 给我一个弹出窗口,上面写着“此页面上的脚本可能正忙,或者它可能已停止响应。您可以立即停止脚本,在调试器中打开脚本,或让脚本继续运行。”

我注意到关于 google groups issue 331 的类似问题('fetchKml 在较慢的连接或快速连接和大型 KML/KMZ 文件时失败')。唉 - 这个问题是在 2009 年。现在是 2012 年。如何在不出现超时问题的情况下以编程方式加载文件?

谢谢你。

4

1 回答 1

1

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

有几种方法可以解决这个问题:

  • 最简单的方法是将您的内容拆分为几个单独的 KML 文件并加载每个文件,可能会setTimeout在每次fetchKml()调用之间产生一个中间值。如果您的主要问题是延迟,这将无济于事,但既然您说这是发生在大型 KML 文件中,那么这里可能不是这种情况。

  • 惯用的方法是在您的 KML 中使用NetworkLinks来加载这些其他文件。第一次fetchKml调用将是同步的,但随后(取决于如何设置更新机制)后续内容将由插件在其自己的时间加载,而不会阻塞 javascript 执行线程。

  • 最后,还有一种“亲自动手”的方式。您可以使用浏览器的本机XMLHttpRequest功能来加载默认情况下异步的 KML 文件。当文件被加载时,你的回调函数会被通知,然后你可以使用 parseKml()在插件中加载该文件并显示其内容。请注意,这parseKml也是同步的,因此在解析文件和创建内容时它会阻塞,但与首先下载文件相比,这通常是一个非常快的步骤。

于 2012-07-22T23:22:01.993 回答