阻止本机 Web 应用在 iOS 上打开时自行重新加载

     2023-02-23     107

关键词:

【中文标题】阻止本机 Web 应用在 iOS 上打开时自行重新加载【英文标题】:Stop native web app from reloading itself upon opening on iOS 【发布时间】:2011-05-16 13:28:26 【问题描述】:

我正在尝试在 iOS 上使用 HTML + JS 构建一个“原生网络应用程序”。您可能知道,您可以将这样的应用程序添加到主屏幕,它或多或少看起来就像一个普通的原生应用程序。

但是,如果我退出这样的应用程序并再次重新打开它,它会再次重新加载整个页面。当通过多任务栏从另一个应用程序切换到此类应用程序时,也会发生这种情况。

这是预期的行为还是有办法阻止设备这样做?

例如,您可以将 jqTouch-Demos 从此处添加到您的主屏幕并进行测试:http://jqtouch.com/preview/demos/main/

【问题讨论】:

在这里查看我的答案:***.com/a/40707231/473637 【参考方案1】:

更新:因为这个答案收到了反对票,所以我添加了这个解释。

您的问题可能不是实际的重新加载,而是 Mobile Safari 在通过浏览器打开 Web 应用程序时对待用户缓存和 cookie 的方式与将其作为 Web 应用程序“安装”到主屏幕时不同。尽管此处提出的使用 localStorage 的解决方案可以工作,但如果您的服务器已经负责保持用户的会话状态,则可以避免这些工作用于客户端逻辑。 30 秒的解决方案是简单地显式设置会话 cookie 以具有更长的生命周期。

这使您即使在设备重新启动之间也能保持状态不变,因此即使从技术上讲它不会阻止从主屏幕启动时重新加载网络应用程序,但它是一种为用户恢复状态的简单方法没有他/她注意到重新加载 - 在许多情况下,我怀疑这是真正的问题。


要更详细地讨论此策略和代码示例,请查看这些问题和我的答案:

Maintain PHP Session in web app on iPhone

iPhone "Bookmark to Homescreen" removes cookies and session?

【讨论】:

这不会阻止重新加载,但它会保留会话变量,这似乎是主要问题,而不是它正在重新加载的事实。【参考方案2】:

你可能想看看使用缓存清单来防止它加载文件。

Matt Might 在这里写得很好:

http://matt.might.net/articles/how-to-native-iphone-ipad-apps-in-javascript/

基本上你把html标签改成这个

<html manifest="cache.manifest">

并在服务器上编写一个 cache.manifest 文件,该文件指定哪些文件应保存在设备缓存中,哪些应从网络动态重新加载。

CACHE MANIFEST
local1.file
local2.file

NETWORK:
network1.php
network2.cgi

您还需要确保您的网络服务器提供具有 MIME 类型 text/manifest 的 .manifest 文件,否则这将不起作用。如果您使用的是 apache,请将以下内容放入您的 .htaccess 文件中:

AddType text/cache-manifest .manifest

【讨论】:

很好的解释,但遗憾的是它并没有解决多任务时Web应用重新加载和丢失状态的问题。【参考方案3】:

同样的问题。 无论如何,如果您不想重新发明***,您可以使用 PhoneGap (http://www.phonegap.com/) 之类的工具。本机 Web 应用程序包装器,内置对许多本机功能的访问。 此外,您将应用程序存储在本地(快速、安全),您当然可以为其收费;) 它在 BSD 或 MIT 许可下。

【讨论】:

【参考方案4】:

您可以将应用的状态保存在 localStorage 中。重新启动时,检查状态是否正在运行,然后将应用程序恢复到上次的位置。

【讨论】:

我通过创建一个为 iOS 4.2 编译的 WebView 应用程序解决了这个问题,因此支持多任务处理。这对我来说非常有效。 我认为ghenne的建议可能是目前最好的解决方案。 如何保存cookies/会话状态? 没有一个步骤可以做到这一点,除非你有一个非常简单的应用程序。存储一条消息,指示您要在重启时恢复其值的每个全局变量的状态和值。 @Chetan:您可以使用下面的策略存储会话 cookie。它不会阻止应用重新加载,但会保持会话处于活动状态(即使在已安装的网络应用和通过 Safari 查看的网站之间)。

System.IO.Compression.ZipFile.CreateFromDirectory - 在 Mac 上打开时没有文件夹结构

】System.IO.Compression.ZipFile.CreateFromDirectory-在Mac上打开时没有文件夹结构【英文标题】:System.IO.Compression.ZipFile.CreateFromDirectory-nofolder-structurewhenopenedonMac【发布时间】:2019-10-2209:47:08【问题描述】:我正在使用创建拉链System.IO.Compres... 查看详情

通过单击应用程序图标(来自后台)打开时反应本机android应用程序重新启动

】通过单击应用程序图标(来自后台)打开时反应本机android应用程序重新启动【英文标题】:reactnativeandroidapprestartswhenopenedbyclickingappicon(comingfrombackground)【发布时间】:2021-04-3001:04:06【问题描述】:我通过点击图标打开我的应... 查看详情

在 Nexus Player、Android Cordova 应用程序上打开时输入第一个字符的虚拟键盘

】在NexusPlayer、AndroidCordova应用程序上打开时输入第一个字符的虚拟键盘【英文标题】:VirtualkeyboardtypingfirstcharacterwhenitisopenedonNexusPlayer,AndroidCordovaapp【发布时间】:2018-12-2716:18:11【问题描述】:我知道这是针对特定设备的一个非... 查看详情

使用人脸 ID 从锁定屏幕打开时应用程序被阻止

】使用人脸ID从锁定屏幕打开时应用程序被阻止【英文标题】:Appisblockedwhenopeningfromlockscreenwithfaceid【发布时间】:2021-12-2707:02:41【问题描述】:我有一个应用程序在我的应用程序运行时禁止其他应用程序使用相机,但是当我将... 查看详情

如何阻止 Flutter Web HtmlElementView 重建/重新运行?

】如何阻止FlutterWebHtmlElementView重建/重新运行?【英文标题】:HowtostopFlutterWebHtmlElementViewfromrebuilding/rerunning?【发布时间】:2020-08-0515:20:56【问题描述】:我使用AgoraSDK在Flutter中构建了一个视频通话应用。这仅适用于iOS/Android,因... 查看详情

重新开始位置后如何阻止球体自行移动?

】重新开始位置后如何阻止球体自行移动?【英文标题】:Howtostopaspherefrommovingbyitselfafterrestartingitsposition?【发布时间】:2016-11-2318:19:39【问题描述】:我在学习Unity的第三天,目前正在学习roll-a-balltutorial。我正在尝试添加一个... 查看详情

在 Mac OS X 上打开时 IDLE 崩溃

】在MacOSX上打开时IDLE崩溃【英文标题】:IDLEcrashwhenopeningonMacOSX【发布时间】:2012-03-1203:28:35【问题描述】:我最近尝试在我的macbookpro上安装python3.2和IDLE3。我成功安装了python3.2(如,我可以从终端运行它),但是当我尝试安装I... 查看详情

即使在杀死并重新启动应用程序后,如何在本机 iOS 中下载音频文件?

】即使在杀死并重新启动应用程序后,如何在本机iOS中下载音频文件?【英文标题】:HowdownloadaudiofilesinreactnativeiOSevenafterkillandrelaunchtheapp?【发布时间】:2020-10-1623:51:43【问题描述】:我的应用中有一个使用ReactNative(0.59)开发的... 查看详情

iOS 9 Web 应用程序阻止在移动 Safari 中打开链接

】iOS9Web应用程序阻止在移动Safari中打开链接【英文标题】:iOS9webapppreventlinkstoopeninmobilesafari【发布时间】:2016-03-3006:22:45【问题描述】:我知道这是一个已知问题,但从iOS9开始,似乎无法再在Web应用程序中打开链接。因此,我... 查看详情

HKObserverQuery 仅在应用程序重新打开时运行

】HKObserverQuery仅在应用程序重新打开时运行【英文标题】:HKObserverQueryonlyrunswhentheapplicationisreopened【发布时间】:2017-07-2320:17:42【问题描述】:所以我一直按照这个答案中的说明进行操作......Healthkitbackgrounddeliverywhenappisnotrunning... 查看详情

为啥我的网络应用程序无法在打开时重新加载

】为啥我的网络应用程序无法在打开时重新加载【英文标题】:Whyismywebappfailingtoreloadonopen为什么我的网络应用程序无法在打开时重新加载【发布时间】:2017-11-0111:58:04【问题描述】:我有一个简单的网络应用程序,我想使用JavaS... 查看详情

从 iOS/Android 上的 Web 应用调用本机日期选择器

】从iOS/Android上的Web应用调用本机日期选择器【英文标题】:Invokenativedatepickerfromweb-apponiOS/Android【发布时间】:2011-06-2405:34:55【问题描述】:我正在尝试探索使用HTML5在不同平台上运行本机网络应用程序的可能性。目前,&lt;in... 查看详情

在 API(php)中 - 了解来自本机 iOS 应用程序或 Web 的请求的方式 [重复]

】在API(php)中-了解来自本机iOS应用程序或Web的请求的方式[重复]【英文标题】:InAPI(php)-WaytoknowrequestfromNativeiOSapplicationorWeb[duplicate]【发布时间】:2018-03-0806:24:05【问题描述】:我有一个用于网站和移动原生iOS应用程序的API。... 查看详情

如何从 iOS 传递信息以在启动时做出本机反应?

】如何从iOS传递信息以在启动时做出本机反应?【英文标题】:HowdoIpassinformationfromiOStoreactnativeonstartup?【发布时间】:2018-05-3103:28:17【问题描述】:编辑为了澄清,我试图在我的应用程序中打开电子邮件中的附件。因此,数据需... 查看详情

如何将值传递给正在加载反应本机应用程序的 Web 视图

】如何将值传递给正在加载反应本机应用程序的Web视图【英文标题】:howtopassvaluestoawebviewwhichisloadingareactnativeapp【发布时间】:2020-11-1519:55:26【问题描述】:我是反应原生的新手,对iOS使用swift语言非常熟悉。我的要求是在iOS现... 查看详情

学习笔记:如何阻止web应用存储敏感数据

   在某些情况下,自定义Web应用会保存敏感(专有)数据到用户的缓存文件夹中。如果不重新架构该应用,使用SysinternalsSDelete的注销脚本是否可以确保数据完全被删除且没有任何可恢复残留呢?MichaelCobb:SecureDelete或SDelet... 查看详情

服务器搭建网站在其他电脑上打不开

...能是路由器设置问题,路由器没映射80端口~~~或者防火墙阻止了~~~原因忒多了~~~一个一个排查~提问就是我服务器上面建的网站可以打开但是别的电脑输入我这个网址就打不开是什么原因能不能给我说几种常见的解决办法。回答应... 查看详情

仅当我在新选项卡上打开时才会打开 KnockoutJs 链接

】仅当我在新选项卡上打开时才会打开KnockoutJs链接【英文标题】:KnockoutJslinkonlyopensifiopenonanewtab【发布时间】:2021-09-2123:20:01【问题描述】:我在下面有一个数据绑定,我可以成功地右键单击并在新选项卡上打开。但是正常的... 查看详情