2013-08-31 14 views
0

在我的PhoneGap Android應用程序,我有以下的Javascript代碼:什麼時候ondevice準備好了,我怎樣才能應用我從它得到的變量?

function onDeviceready() 
{ 
    window.plugins.webintent.getUri(function(url) 
    { 
     alert("WebIntent Fired Up! URL is " + url); 
     if (url.substring(0, 37) === "https://xxxxxxx.com/confirmation.html") 
     { 
      alert("intent matched!"); 
      var params = url.substr(url.indexOf("?") + 1); 
      params = params.split("&"); 
      var verificationData = params[0].split("="); 
      var emailData = params[1].split("="); 
      launchLinkEmail = emailData[1]; 
      launchLinkVerification = verificationData[1]; 
      alert("verification is " + launchLinkVerification); 
      alert("email is " + launchLinkEmail); 
     } 
    }); 
} 

$(document).ready(function() { 
    document.addEventListener('deviceready', onDeviceready, true); 
}); 

的問題是變量launchLinkVerificationlaunchLinkEmail似乎得到設定後的頁面加載和JavaScript是完成了,所以當我嘗試在任何想要使用它的地方調用它時,它們的值都是空的。警報總是顯示我想要的信息,但如果我嘗試在我的HTML頁面的任何位置顯示它們,或者根據它們的值設置條件,則兩者都不起作用。

另一方面,如果我在onDeviceready以外的任何地方使用window.plugins.webintent.getUri(function(url),它似乎根本不會執行(或者至少不是我可以預測或理解的條件下),並且變量也不會得到設置。

Ultmately,我想要做的是:

  1. 從WebIntent捕獲的網址,以獲取數據。

  2. 如果從WebIntent數據符合一定規則,然後切換到使用window.location = confirmation.html

  3. 上填寫confirmation.html與兩個變量我從WebIntent拿起了URL的形式對兩個領域的另一頁。

我如何從Webintent調用數據,根據這些數據是什麼開關頁面,然後使用新的頁面上的數據?

回答

1

我沒有專門使用WebIntent插件,但是如果我正確理解了你的描述,我認爲你遇到了一個問題,你在頭部運行一些JavaScript或者在正文中配置頁面你想要的方式。但是,該代碼取決於onDeviceready()中發生的情況。對於onDeviceready()的調用將在任何時候異步進行,PhoneGap感覺它已經準備就緒。通常它會很快被調用,但很快就是一個相對術語。

你可能需要的是這個異步代碼,然後觸發你想要的代碼。 JQuery提供了$ .Deferred()對象,您可能會發現它很有幫助。你可以設置一個Deferred,你用Deferred.done()添加你的其他代碼,當它運行onDeviceready()時,解析出運行回調的對象。

http://api.jquery.com/jQuery.Deferred/

我用這個允許類似onDeviceready()引發了一系列在我的應用其他行爲,我可能沒有想構建成一個大的功能。

相關問題