Cordova,onResume() 仅在我包含 alert() 时才有效

Posted

技术标签:

【中文标题】Cordova,onResume() 仅在我包含 alert() 时才有效【英文标题】:Cordova, onResume() only works when I include alert() 【发布时间】:2015-12-18 05:44:38 【问题描述】:

我正在使用cordova 的推送插件。当用户点击通知时,它会按预期将他们带到“广告页面”。但奇怪的是,它只有在我在 onResume() 中包含 alert() 或者在点击通知后再次打开应用程序时才有效。

function onNotificationAPN(e) 
    // Event callback that gets called when your device receives a
    // notification

    imgURL = e.imgURL; //should get set at same time notification appears

    if (e.alert) 
        navigator.notification.alert(e.alert);
    


function onResume() 

    alert(imgURL); //1st

    if(imgURL)
    
        alert(imgURL); //2nd
        window.location.href = "ad.html";
        imgURL = null;
    

第一个警报显示“未定义”。但是第二个警报显示了我的通知有效负载中设置的 imageURL。如果我将第一个警报注释掉,则不会出现第二个警报。但是,如果我关闭并重新打开该应用程序,它会这样做。

这是怎么回事?

【问题讨论】:

onResumeonNotificationAPN 之前被调用。你为什么不在onNotificationAPN做重定向? @jcesarmobile 不是先调用 onNotificationAPN() 吗?它使应用程序在后台运行时出现通知,所以我认为它也会在这个时候设置 imgURL。 在两者上都写一个日志,看看之前调用了哪个,但如果 imgURL 为 null 除非你使用超时,onResume 它可能在之前被调用 【参考方案1】:

您是否将 imgURL 定义为全局变量,因为它在不同的函数中使用?我不是 100% 确定,但您可以使用超时代替警报。

    var imgURL;

function onNotificationAPN(e) 
    // Event callback that gets called when your device receives a
 // notification

    imgURL = e.imgURL; //should get set at same time notification appears

    if (e.alert) 
        navigator.notification.alert(e.alert);
    


function onResume() 

    //alert(imgURL); //1st

setTimeout(function() 
        if(imgURL)
        
            //alert(imgURL); //2nd
            window.location.href = "ad.html";
        imgURL = null;
        
, 3000);



【讨论】:

啊,是的,我在所有函数之外的 js 文件顶部定义了 imgURL。哦,好建议。我忘记了setTimeout。谢谢,我会试试这个。 是的,这似乎也有效!现在我只需要弄清楚为什么。谢谢! @Ethan Fischer:我不知道为什么会这样,但有时插入 0 毫秒的超时会有所帮助。

以上是关于Cordova,onResume() 仅在我包含 alert() 时才有效的主要内容,如果未能解决你的问题,请参考以下文章

Cordova iOS onResume 在启动和崩溃应用程序时触发

cordova.js 文件的动态包含在 Windows Phone 7 中不起作用?

WKWebViewEngine 仅在与 cordova-plugin-mfp 结合使用时显示空白屏幕

如何在 React JS 页面中使用 Cordova 插件

Xtify Cordova 未在应用程序中接收 gcm 推送(仅在从推送启动时)

php require_once 尝试仅在我的生产服务器上包含第二次