Cordova:桌面环境中未显示警报(它们在模拟器和真实设备上正常工作)

时间:2018-02-19 08:37:28

标签: javascript ios cordova cordova-plugins

我正在使用Cordova开展宠物项目。目前,目标平台只是IOS。在开发过程中,我使用警报标记来确保我的预期实际发生。(我个人发现,在日志非常方便的简单情况下,警报更容易使用在复杂的情况下)。在代码中的某个时刻,我有一个按钮和一个在单击该按钮时执行的函数。

包含相关的cordova插件,如下面的终端输出所示:

cordova plugins
cordova-plugin-dialogs 2.0.1 "Notification"
cordova-plugin-geolocation 4.0.1 "Geolocation"
cordova-plugin-whitelist 1.3.3 "Whitelist"

为方便起见,我将警报功能绑定到窗口对象中:

document.addEventListener('deviceready', function () {
  console.log("deviceready");
  if (navigator.notification) { 
      window.alert = function (message) {
          navigator.notification.alert(
              message,    // message
              null,       // callback
              "My Awesome App", // title
              'OK'        // buttonName
          );
      };
      startApp();  // This is the kick off point for my app
  }
}, false);

更新3 :我怀疑上面的window.alert分配是错误的。如果我注释掉这个任务,常规警报会按预期工作(但它们看起来很难看)。 有没有人看到任何可疑的用法?

在startApp函数中,我有以下行将click事件绑定到按钮:

$('#startActionButton').on('click', {name: 'this is really not need'}, someView.startAction);

我的startAction函数位于View类中,定义为:

this.startAction = function(event){
    window.alert('Starting Action');
    console.log('Starting Action');
}

此代码在IOS模拟器和真实的IOS设备上运行良好。但是,每次将代码部署到任一平台都很费时。因此,我更倾向于在大多数情况下开发响应式桌面环境,然后在每个开发周期结束时在模拟器或真实设备中进行详细测试。

因此,当我在桌面环境中使用以下命令运行应用程序时:

cordova serve

执行在控制台日志中看到开始操作。但是,我没有得到警报。

以下是我的问题。

  1. 有谁知道为什么会这样?
  2. 我调试了代码,并在startAction函数中设置了一个断点,在alert函数行上。在调试器窗口中,我输入以下内容并得到如下响应:
  3. window.alert is defined and undefined? WTH??

    任何想法是怎么来的window.alert未定义虽然我可以确认它存在并且它有正确的源代码?

    这对我来说不是一个封路障问题,因为我可以使用console.logs,但我只是很好奇,为什么警报无法在桌面环境中工作。 Cordova代码中是否有任何已知错误?我错过了什么吗?好奇。

    任何见解都将受到高度赞赏。

    PS:我想在添加之前添加并删除并重新安装通知插件。但它没有帮助。

    PS2:我使用的cordova版本是:

    cordova -version
    8.0.0
    

    更新1 我忘了添加,我也使用ratchet.css(而不是js)进行格式化,虽然我认为它与它无关。

    更新2 在@Gandhi的询问下,我的index.html中包含了cordova.js         

    更新4 我重命名了自定义提醒,如下所示:

      window.myalert = function (message) {
          navigator.notification.alert(
              message,    // message
              null,       // callback
              "My Awesome App", // title
              'OK'        // buttonName
          );
      };
    

    现在我可以确认常规JS警报可以正常工作,而这个自定义myalert仍然没有。

1 个答案:

答案 0 :(得分:0)

OP的主要目的是在桌面环境中开发和测试应用程序,以便快速转换时间。在桌面环境中测试应用程序后,可以将其移植到iOS模拟器进行进一步测试。

浏览器' cordova中的平台是根据此要求量身定制的,这有助于使用Chrome等浏览器测试应用。有关浏览器平台的更多信息,请查看following link。希望它有所帮助。