设备何时准备就绪,以及如何应用从中获得的变量

When does ondevice ready happen, and how can I apply variables I get from it?

本文关键字:应用 变量 准备就绪 何时 何应用      更新时间:2023-09-26

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

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

最后,我想做的是:

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

  2. 如果WebIntent中的数据符合某些条件,则使用window.location = confirmation.html 切换到另一个页面

  3. 用我从WebIntent获取的URL中获得的两个变量填充confirmation.html上表单的两个字段。

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

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

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

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

我用它来允许像onDeviceready()这样的东西在我的应用程序中触发一系列其他行为,我可能不想将这些行为构造成一个大函数。