2017-04-12 84 views
1

谷歌提供這個腳本初始化谷歌地圖:谷歌地圖回調未加載?

<script async defer src="https://maps.googleapis.com/maps/api/js key=YOUR_API_KEY&callback=initMap"> 

我想關注的部分是:

callback=initMap 

由於腳本被裝載async defer是非阻塞的,究竟是什麼在調用initMap回調時保存此函數的文件尚未加載時發生?

假設這個函數被放入外部文件並加載到Google地圖腳本之後。這可能來自另一臺服務器,當回調試圖調用該函數時,該服務器可能不會及時加載。

它試圖調用函數並失敗,只做一次嗎?

回答

1

由於腳本被加載異步延遲並無阻塞 ,實際發生的事情時,initMap回調被稱爲 雖然還沒有加載保存此功能的文件嗎?

您將得到類似於initMap is not defined異常。

的解決方案是僅使用defer屬性加載在正確的順序JavaScript文件:

<script defer src="https://example.com/initMap.js"></script> 
<script defer src="https://maps.googleapis.com/maps/api/js key=YOUR_API_KEY&callback=initMap"> 

defer屬性負載並聯腳本,但保留了執行順序(在神志清醒的瀏覽器)。

另一種解決方案是嵌入HTML頁面內的initMap功能,並把它後<script defer><script async defer>