2014-10-19 23 views
0

我剛剛開始使用phonegap。我有一個現有的應用程序,它是一個Java servlet容器。我寫了一個簡單的抓取工具,可以提取所有相關的JS,CSS和圖像等,所以我現在有一個簡單的HTML應用程序。它使用requirejs。Phonegap和requirejs動態腳本加載失敗

我現在試圖用phonegap來構建它。但是,我遇到了以下問題,這可能是一個錯誤?或者我正在做的是錯誤的。

會出現以下情況:

  1. 頁面加載罰款
  2. 按一下週圍工作正常
  3. 該應用程序將被改變URL在後臺(使用骨幹)
  4. 最後,我點擊觸發requirejs的按鈕,它依次嘗試加載腳本。
  5. 我可以看到下面的錯誤,當我使用的是Chrome瀏覽器在調試我的Android VM

GET file:///js/step.search-2.0.6-SNAPSHOT.min.js step.2.0.6-SNAPSHOT.min.js:1 Uncaught Error: Script error for: search http://requirejs.org/docs/errors.html#scripterror step.2.0.6-SNAPSHOT.min.js:1

GET file:///js/step.qtip-2.0.6-SNAPSHOT.min.js step.2.0.6-SNAPSHOT.min.js:1 Uncaught Error: Script error for: qtip http://requirejs.org/docs/errors.html#scripterror

GET file:///js/step.quick-lexicon-2.0.6-SNAPSHOT.min.js step.2.0.6-SNAPSHOT.min.js:1 Uncaught Error: Script error for: quick_lexicon http://requirejs.org/docs/errors.html#scripterror

這是一個錯誤的的WebView?

這裏是我的requirejs配置

requirejs.config({ 
waitSeconds: 15000, 

paths : { 
    sidebar: ["js/step.sidebar-STEP_SERVER_VERSION_TOKEN.min"], 
    quick_lexicon : ["js/step.quick-lexicon-STEP_SERVER_VERSION_TOKEN.min"], 
    qtip : ["js/step.qtip-STEP_SERVER_VERSION_TOKEN.min"], 
    view_help_menu: ["js/step.help-menu-STEP_SERVER_VERSION_TOKEN.min"], 
    drag: ["js/step.draggabilly-STEP_SERVER_VERSION_TOKEN.min"], 
    menu_extras: ["js/step.menu_extras-STEP_SERVER_VERSION_TOKEN.min"], 
    html2canvas: ["js/step.html2canvas-STEP_SERVER_VERSION_TOKEN.min"], 
    search: ["js/step.search-STEP_SERVER_VERSION_TOKEN.min"] 
} 

});

我也注意到以下行爲:

  • 如果我打開了Chrome瀏覽器開發控制檯,並嘗試寫一個標籤,當第一次加載頁面時,將文件加載罰款
  • 如果後點擊一些按鈕/菜單我做的一樣,該文件加載失敗,大概是因爲webview中的URL已經改變?

換句話說,如果我的應用程序已經呈現之後運行以下片段,那麼在與之交互之前,它會起作用。與應用程序交互後,它會停止與上述相同的錯誤。

$("head").append('<script src="js/step.2.0.6-SNAPSHOT.min.js" type="script/javascript"></script>') 

在頭,我注意到,requirejs正確地把相對路徑,而不是絕對的,在資源:

<script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="sidebar" src="./js/step.sidebar-2.0.6-SNAPSHOT.min.js"></script> 

最後,由窗口中的開發者控制檯中提供的網址。 location.href是:

前:文件:///android_asset/www/index.html」 後:文件:/// q =版本= ESV |強= G0018 &選項= HVNUG

所以我會發布這個反正其他人發現相同的問題,但我認爲寫這個幫助我瞭解問題的根源。

克里斯

回答

1

所以,可以肯定的是,根本原因是:使用URL歷史似乎已經移到瀏覽器的地址在某個地方而不再相對於android_asset/WWW/index.html的,這反過來將打破任何進一步腳本的加載。

顯然,下一個問題是如何解決這個問題 - 我將詳細討論這個問題。也許標籤可能派上用場。但更好的是,修復網址以確保它仍然相對於index.html。這可能會特定於我自己的用例。