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

Posted

技术标签:

【中文标题】Cordova:在桌面环境中未显示警报(它们在模拟器和真实设备上运行良好)【英文标题】:Cordova: Alerts not shown on desktop environment (They work fine on simulator and real device) 【发布时间】:2018-02-19 08:37:27 【问题描述】:

我正在使用 Cordova 开发一个宠物项目。目前,目标平台只有ios。在开发过程中,我使用alerts标记来确保我的意图确实发生了。(我个人发现,在日志非常方便的简单情况下,alerts更容易使用在复杂的场景中)。在代码中的某个位置,我有一个按钮和一个在单击该按钮时执行的函数。

包含了相关的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 函数中,我有以下行将点击事件绑定到按钮:

$('#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

确实在控制台日志中看到了 Starting Action。但是,我没有收到警报。!

这是我的问题。

    有人知道为什么会这样吗? 我调试了代码,并在 startAction 函数中放了一个断点,在 alert 函数的行上。在那里,在调试器窗口中,我输入了以下内容并得到如下响应:

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

【问题讨论】:

你试过用简单的alert("This is alert!"); 谢谢。是的,我也试过了。但它也不起作用。 这很奇怪。对我来说works 很好.. 完全同意,确实很奇怪。它应该可以工作。 尝试在 deviceready 函数之外使用 alert 【参考方案1】:

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

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

【讨论】:

以上是关于Cordova:在桌面环境中未显示警报(它们在模拟器和真实设备上运行良好)的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 表单:iPhone 设备中未显示位置权限警报

离子屏幕方向 Cordova 插件在 iOS 环境中未锁定为纵向模式

在 Cordova 3.2.0 中未触发 deviceready 事件

在访问 vba 的 excel 文件中未启用显示警报

ios 7 中未显示社交视图的默认警报

使用 Xcode 10 在 Watch Simulator 中未显示资产目录图像?