1
與others一樣,我試圖說明在移動瀏覽器中運行的javascript代碼和電話webuiview中的區別。標準解決方案是等待事件觸發,因爲事件觸發後,您知道您處於電話中。但你等多久?Phonegap deviceNotReady事件?
我有代碼,我想盡快運行,因爲我不希望我的用戶坐在等待。但我不想在phonegap初始化之前運行它,如果它要初始化的話。我正在尋找的是類似於devicenotready
事件,當cordova.js
代碼運行後發生,並確定沒有任何附加條件。或者我可以輪詢一些變量來說明cordova仍在裝載和cordova放棄嘗試裝載之間的區別。有區別嗎?
我討厭這個解決方案,但它是我想到的最好的。請告訴我有什麼東西比這更好:
function whenLoaded(callback,timeout) {
var when_loaded_needs_running = true;
document.addEventListener('deviceready', function() {
if(when_loaded_needs_running) {
when_loaded_needs_running = false;
callback();
} else {
console.log("deviceready fired too late. whenLoaded already ran.");
}
});
window.setTimeout(function() {
if(when_loaded_needs_running) {
when_loaded_needs_running = false;
console.log("deviceready didn't fire after "+timeout+"ms. running whenLoaded anyway.");
callback();
}
}, timeout);
}
都能跟得上。這些變量在加載腳本時會被設置,無論它是否工作。所以這隻有在服務器知道是否包含cordova'script'標記時纔有效,由於用戶代理相同,AFAICT是不可能的。 – Leopd
無論客戶端如何加載腳本文件似乎都很愚蠢。我假設你正在遠程加載所有資產?也就是說,您的手機webview會像移動網頁瀏覽一樣從您的服務器獲取index.html,phonegap.js等內容?如果是這樣,請考慮不要爲您的phonegap客戶端做這件事。您的phonegap用戶已經在等待資產進入,所以您的初始解決方案不會比他們已經經歷的時間延遲得多。 Phonegap爲您提供了一個「編譯」步驟 - 您在提交到應用商店之前打包了您的應用。利用這一點。 –
如果服務器生成的HTML頁面有加載本地資源的方式,請告訴我如何,因爲我的理解是不可能的。至於移動所有與數據庫交互的邏輯,並從我的服務器生成頁面到客戶端JavaScript,這實際上並不重要。 – Leopd