2012-07-19 37 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也是同步的,所以在分析文件和創建內容時將阻止 ,但通常是 ,與首先下載 中的文件相比,這是非常快的步驟。