0

在我的 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有时根本不会执行(或者至少不是在我可以预测或理解的条件下),并且变量也没有设置。

最终,我想做的是:

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

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

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

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

4

1 回答 1

1

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

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

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

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

于 2013-08-31T06:09:30.703 回答