javascript - Cordova:警报未在桌面环境中显示(它们在模拟器和真实设备上运行良好)

标签 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"

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

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 函数中,我使用以下行将单击事件绑定(bind)到按钮:

$('#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函数行上放置了一个断点。在调试器窗口中,我输入了以下内容并得到了如下响应:

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 仍然无效。

最佳答案

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

cordova 中的“浏览器”平台是针对此要求量身定制的,有助于使用 Chrome 等浏览器测试应用程序。您可以查看following link有关浏览器平台的更多信息。希望对您有所帮助。

关于javascript - Cordova:警报未在桌面环境中显示(它们在模拟器和真实设备上运行良好),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48862174/

相关文章:

ios - 自动布局后使 View 变圆

javascript - 如何在javascript中重新计算变量

javascript - 如何绑定(bind)bind和load方法?

javascript - 正则表达式在捕获组中保留尾随斜杠

ios - 在委托(delegate)方法中进行更改时未反射(reflect) View 更改

android - 检测 Android Cordova webview 何时完成加载

javascript - prismjs(代码高亮插件)水平显示代码

ios - 将 UILabel 放置在父级的中心

javascript - 重复下载 - Cordova/Framework7

iOS 应用程序 : webView or PhoneGap?