35

我有兴趣创建一个基于 HTML5 地理位置的 Web 应用程序,该应用程序在手机屏幕关闭时仍然可以运行(例如,当手机放在口袋里时跟踪你运行了多远)。

有没有办法让应用程序保持运行但关闭屏幕,或者在使用其他应用程序时让应用程序在后台运行?这至少在一些流行的移动设备上是可能的吗(尤其是较新的 iOS 和 Android 设备?)

4

2 回答 2

27

我的音乐应用是 HTML5,也需要在后台运行。对此的支持因移动浏览器而异。

  • iOS 上的 Safari:会在后台继续播放一两首歌曲
  • Android上的本机浏览器:将播放一首歌曲然后停止
  • Android上的Firefox:当屏幕锁定或浏览器失去焦点或歌曲结束时将停止
  • Android 上的海豚:在后台播放!但最终停止
  • Android 上的 Opera:更好的后台支持,Javascript 继续运行,音乐继续播放,即使屏幕关闭或 Opera 被发送到后台,但最终在几首歌曲后停止。

如您所见,它是命中还是未命中。有一半的时间我最终试图把手机放在口袋里,试图让屏幕保持打开状态,直到我不小心按下它——这太糟糕了。我渴望有一天用户可以更好地控制在后台运行 HTML5 应用程序。如果我不得不猜测,我会说对此的普遍支持还很遥远,如果它甚至获得牵引力的话。尽管我几乎肯定苹果永远不会批准它,但我被迫转向原生应用程序解决方案。与此同时,我将保持希望并继续测试最新的移动浏览器。因为如果它真的发生了,那就太棒了。:-)

我还应该指出,根据我的经验,对于上述几乎所有的组合,使用 HTML5 同时运行 javascript、提取网络数据和播放音乐通常会将您的手机变成烤箱并很快耗尽您的电池。乌格。

此外,如果您使用 jQuery Mobile(这非常棒),您会在不同的浏览器上看到不同的触摸处理。例如,Firefox touch 效果很好,Dolphin 很糟糕,需要精确的触摸并按住并释放才能正确。这不是 HTML5 的直接错误,而是我正在处理的另一个问题。

以下是另一位开发人员对移动 HTML5的有趣想法。

更新:我刚刚(2013 年 5 月 22 日)在我的三星 Galaxy S3 上下载了 Opera,它拥有迄今为止最好的 HTML5 支持。对于我的应用程序,它会继续在后台运行 javascript,无论是关闭屏幕还是将 Opera 推送到后台,至少会播放几首歌曲。

于 2013-05-08T13:56:44.607 回答
6

您可以使用服务工作者:

https://developers.google.com/web/fundamentals/primers/service-workers/

服务工作者是您的浏览器在后台运行的脚本,与网页分开,为不需要网页或用户交互的功能打开了大门。如今,它们已经包含推送通知和后台同步等功能。将来,服务工作者可能会支持其他功能,例如定期同步或地理围栏。

准确地说,应用程序可以注册一个服务工作者,如下所示:

if ('serviceWorker' in navigator) {
  window.addEventListener('load', function() {
    navigator.serviceWorker.register('/sw.js').then(function(registration) {
      // Registration was successful
      console.log('ServiceWorker registration successful with scope: ', registration.scope);
    }, function(err) {
      // registration failed :(
      console.log('ServiceWorker registration failed: ', err);
    });
  });
}

一旦 service worker 注册成功,任何在 sw.js 中实现的应用逻辑都会在后台执行;即使应用程序选项卡被禁用。

于 2018-05-12T17:53:29.520 回答