什么时候准备就绪,我怎样才能应用我得到的变量?

时间:2013-08-31 05:53:44

标签: javascript android cordova

在我的Phonegap Android应用中,我有以下Javascript代码:

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页面的任何位置显示它们,或者根据它们的值设置条件,那么它们都不起作用。

另一方面,似乎如果我在window.plugins.webintent.getUri(function(url)之外的任何地方使用onDeviceready,它有时根本不执行(或者至少不在我能预测或理解的条件下),并且变量没有被设置。

Ultmately,我想做的是:

  1. 从WebIntent捕获的URL中获取数据。

  2. 如果来自WebIntent的数据符合某些条件,请使用window.location = confirmation.html

  3. 切换到另一个页面
  4. 使用我从WebIntent选择的网址获得的两个变量,在confirmation.html上的表单上填写两个字段。

  5. 如何从Webintent调用获取数据,根据数据切换页面,然后在新页面上使用该数据?

1 个答案:

答案 0 :(得分:1)

我没有特别使用过WebIntent插件,但如果我理解你的描述正确,我认为你遇到了一个问题,你在头部或者在正文中运行一些JavaScript来配置页面你想要的方式。但是该代码取决于onDeviceready()中发生的事情。对onDeviceready()的调用将在任何时候异步进行,PhoneGap认为它已经准备就绪。通常它被称为快速,但很快就是一个相对术语。

您可能需要的是这个异步代码,然后触发您想要的代码。 JQuery提供了$ .Deferred()对象,您可能会发现它有用。您可以设置Deferred,使用Deferred.done()添加其他代码,当它运行onDereadyready()时,会解析运行回调的对象。

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

我已经用它来允许onDeviceready()这样的东西在我的应用程序中触发一系列其他行为,我可能不希望将它们组合成一个大函数。