2013-04-03 65 views
2

在我的應用程序中,我在調用index.html中的腳本文件時調用函數init()。以下代碼應驗證cordova是否已成功加載(適用於現代手機,特別適用於較老的黑莓手機),然後調用onDeviceReady函數。如何防止PhoneGap設備就緒功能執行兩次

我改編了Jamie Munro的「編程PhoneGap的20個食譜」中的代碼,但它沒有正常工作(intervalID僅在本地可用)。後來發現onDeviceReady函數被多次調用......我嘗試了幾種方法來防止它,但即使是下面的例子在ripple仿真器中運行時也沒有辦法。

我錯過了什麼?

var count = 0 

function init() { 

    // Add an event listener for deviceready 
    document.addEventListener("deviceready", onDeviceReady, false); 

    // Older versions of Blackberry < 5.0 don't support 
    // PhoneGap's custom events, so instead we need to perform 
    // an interval check every 500 milliseconds to see whether 
    // PhoneGap is ready. Once done, the interval will be 
    // cleared and normal processing can begin. 
    intervalID = window.setInterval(function() { 
     if (window.cordova) { 
      window.clearInterval(intervalID); 
      onDeviceReady(); 
     } 
    }, 1000); 
} 

function onDeviceReady() { 

    if(count == 0) { 
     count += 1; 
     alert('The device is now ready'); 
    } 

} 
+2

設備是否準備好在設備上多次調用?漣漪很多次都會出現異常,並且會發生兩次大部分事件。 – Whizkid747 2013-04-03 22:55:17

+1

它在黑莓手機上表現很好,所以我認爲這只是一個小小的漣漪而已...... – 2013-04-07 10:35:39

+0

是的......總是在設備模擬器或實際設備上測試 – Whizkid747 2013-04-07 14:58:38

回答

1

紋波似乎一旦加載頁面捕捉URL,然後再加載它的iframe中,以顯示它的模擬電話。因此,所有內容的兩個副本都會被加載到不同文檔中。由於我獲得了包括按鈕點擊在內的所有事件的兩個事件,因此似乎我的代碼的兩個副本都會收到相同的事件。或者Ripple可以爲另一個複製它。但是隨着代碼在不同的文檔和不同的範圍,它們似乎不會互相干擾(至少它們對我來說還沒有)。也許別人可以提供更好,更有見解的解釋,我認爲我發現了什麼。