2013-08-20 66 views
6

我正在編寫一個使用require.js作爲我的加載框架的移動混合應用程序。我遇到加載錯誤的問題。我試圖做的是設置一個備用解決方案,當設備處於脫機狀態時,我無法下載我需要在屏幕上顯示地圖的Google地圖API腳本。我得到的全部是如何處理requireJs超時錯誤?

Uncaught Error: Load timeout for modules: async!http://maps.googleapis.com/maps/api/js?sensor=true 

但我無法捕捉到這個錯誤並提供了一個替代實現。這是我的gmaps模塊定義

define('gmaps', ['async!http://maps.googleapis.com/maps/api/js?sensor=true'],function(){ 
    return window.google.maps; 
}); 

我該怎麼辦?

編輯

我設法找到一個可行的解決方案感謝您的幫助。我設置需要這樣

require.config({ 
    paths: {   
     gmaps: ['http://maps.googleapis.com/maps/api/js?sensor=true', 'lib/dummymaps'] 
    } 
} 

dummymaps僅僅是一個簡單的模塊:

define({ 
    dummy: true 
}); 

然後在我的「父」模塊,我做的:

define(["gmaps"],function(gmaps){ 
    ... 
    if(typeof gmaps.dummy != 'undefined' && gmaps.dummy == true){ 
     // use a local image as map 
    } else { 
     // initialize google maps canvas 
    } 
}); 

你認爲這是一個好的解決方案

編輯2:

原諒我,這不是與此代碼的工作。它總是回退到替代實現,因爲gmaps需要使用異步插件才能完全加載,並且我無法使其與插件一起工作。

+0

不管你做什麼,絕對去協議相對URL(以//開頭),所以你不會遇到http和https的問題。這些問題是瀏覽器特定的,用戶可能會看到警告或JS文件根本不會加載。 例如:http://cdnjs.com/ – nekaab

+0

謝謝,我終於明白了爲什麼現在使用這種類型的網址! – sangaran

+0

我也有這個問題,如果有的話,超時錯誤在哪裏?我無法在本地或全局錯誤處理程序中捕獲它。 這是谷歌分析導致我的問題,如果超時我只是想繼續加載模塊。 –

回答

2

你可以嘗試以下方法:

requirejs.config({ 
    paths: { 
     // define an alias here, first try remote, if it fails it will try your local file 
     'gmaps': ['http://maps.googleapis.com/maps/api/js?sensor=true', 'your local file.js'] 
    } 
}); 

define('gmaps', function(gm) { 
    // var gm should now be the google maps plugin 
    console.log(gm); 
}); 
+0

我編輯了我的答案,包括基於此的解決方案,或多或少。 – sangaran

0

的RequireJS文檔有a section on errors將覆蓋你的具體情況。

詳細信息falling back to a local copy of jQuery如果CDN不可用。

+0

這不一樣。我不想取代gmaps實現。我想讓我的一個模塊依賴於gmaps,但如果gmaps不是真正的模塊,它應該改變它的行爲。可能嗎? – sangaran

6

您可以通過捕獲錯誤:

requirejs.onError = function (err) { 
    if (err.requireType === 'timeout') { 
     alert("error: "+err); 
    } 
    else { 
     throw err; 
    } 
}; 

希望這有助於!

1

我相信你原來的問題從未解決過你想要的東西,而我們遇到了同樣的問題。基本上,我們希望有一種方法可以在谷歌地圖超時或不可用時正常恢復,因爲有時我們的應用程序將在用戶的機器上運行,並且他們無法訪問互聯網。

我最初使用的是異步!其他人使用的插件,但無法提供允許我需要的錯誤處理的修改。

因此,我寫了我自己的工具類,它在requireJS容器外異步加載谷歌地圖,並提供錯誤回調處理。看看它是否能解決你的問題。對於我們來說,它允許我們在maps.google時向用戶呈現一個很好的警告視圖。COM無法達成,而應用程序的其餘仍在正常加載:

https://github.com/mag382/googleMapsLoaderUtil

2

我有同樣的問題,我在這個片段中解決它:

require(['async!http://maps.google.com/maps/api/js?sensor=false'], function() { 
    //Success processing 
}, function (e) { 
    //Error processing 
});