Javascript 让WebSocket在Mobile Safari中保持活力

Javascript 让WebSocket在Mobile Safari中保持活力,javascript,ios,websocket,mobile-safari,Javascript,Ios,Websocket,Mobile Safari,一旦屏幕锁定,是否可以在Mobile Safari中保持html 5网页WebSocket连接打开 我想向我的用户发送全天的持续更新,而他们的屏幕总是需要解锁才能接收这些通知,这似乎很愚蠢 还有其他选择吗?我认为在浏览器处于后台或屏幕锁定时,无法保持连接打开,原因是应用程序基本上冻结在内存中。以下是一段引自: 你无法保持网络套接字打开的原因是,如果你的应用在接收到连接时没有跳转到前台,它将无法响应网络流量(因为如果它不在前台,它的内存内容将被冻结) 然而,我确实在上找到了这个页面,它向您展示了“

一旦屏幕锁定,是否可以在Mobile Safari中保持html 5网页WebSocket连接打开

我想向我的用户发送全天的持续更新,而他们的屏幕总是需要解锁才能接收这些通知,这似乎很愚蠢


还有其他选择吗?

我认为在浏览器处于后台或屏幕锁定时,无法保持连接打开,原因是应用程序基本上冻结在内存中。以下是一段引自:

你无法保持网络套接字打开的原因是,如果你的应用在接收到连接时没有跳转到前台,它将无法响应网络流量(因为如果它不在前台,它的内存内容将被冻结)

然而,我确实在上找到了这个页面,它向您展示了“即使您的站点未在Safari中运行,如何注册您的用户以接收通知”

还有一些其他选项:如果你想发送持续更新,你可以编写一个应用程序,然后按照苹果网站上的说明进行操作,或者配置应用程序来实现


很抱歉,我找不到快速解决方案,但我希望至少有一个选项适合您

我找到了一种让WebSocket在移动Safari中保持活力的方法

基本上,这和我们的解决方案是一样的

创建无限循环音频文件以保持Javascript运行:

<audio loop src="http://www.sousound.com/music/healing/healing_01.mp3"></audio>

注意:启动音频文件需要一些用户交互

如果WebSocket能像音频或视频文件一样让浏览器保持活动状态,那就太好了


PS这也适用于Android。

您使用的服务器端架构是什么?@Pinal:请不要为了强调而添加内联代码跨度(
,像这样
)。有关更多信息,请参阅。@khagesh:我不确定服务器架构是否重要?我正在使用rails 4和rails websocket gem。谢谢。我强烈怀疑你是对的,在MobileSafari中不能保持插座打开。我确实看到过一些让javascript在safari后台页面中运行的黑客行为——这可能提供了一个解决方案,但我还没有尝试过。我最后的办法是不使用Safari,而是切换到我希望避免的本地包装,比如Cordova。这个答案是正确的。没有办法像虚拟机那样运行选项卡/页面的简单原因。一旦出现,想象虚拟机被挂起,任何东西都无法与它们交互。这是正确的。网站不应该在你不在页面上时运行内容。谢谢Martin。有焦点的“虚拟机”会自动暂停,因为屏幕被遮住似乎是通向远方的桥梁,特别是在设备(1)通电且(2)使用wifi的情况下。如果他们允许开发者选择在屏幕空白时不暂停虚拟机,这似乎会更好。我觉得这不公平!想象一下,很多网站都包含WS并将其保留在后台的情况。这会在未经用户同意的情况下耗尽电池电量。这就是我在Android上的Lightning浏览器中看到的,它甚至在手机锁定后保持连接,啊@k3a我发现不公平的是,一个本地应用程序可以保持它的线程活动,而一个web应用程序不能-特别是当使用ws时,整个要点是实时更新!更好的解决方案是Android要求用户允许这种情况发生