阻止离线 iPhone Web 应用程序在 Safari 中打开链接

2024-02-07

我正在开发一个可以在离线模式下与移动 Safari 配合使用的网站。我可以将其添加到主屏幕上并从那里加载。但是,一旦从主屏幕打开,单击某些链接将跳出应用程序并在移动 safari 中打开 - 尽管我在所有链接单击上阻止了 Default()!

该应用程序在<body>等级。使用事件委托,它可以捕获任何链接上的任何点击,查看其 href(例如“帮助”或“评论”),并动态调用 JavaScript 模板并更新页面。事件处理程序在事件对象上调用 PreventDefault() – 用于some有效的链接的数量,并且页面将使用模板输出进行更新。但是,对于在输出模板结果之前导致本地数据库命中的链接,这些链接会在 mobile safari 中打开。

在桌面 safari 中,即使我处于离线状态,所有链接都可以工作 - 正在发生移动 safari 特有的事情。

你有什么想法为什么有些链接可以离线使用,而其他链接则不行?清单文件中没有列出任何有问题的链接 URL,但它们不需要(不应该)列出,因为链接操作被阻止。

一些额外的奇怪之处: * 一旦我单击在移动 Safari 中加载的链接,即使我处于离线状态,这些相同的链接现在也可以正常工作,并且使用数据库中的数据填充的模板也可以正常工作。换句话说:从主屏幕打开时链接会失败,但从 mobile safari 离线打开时链接不会失败 * 更改链接以删除数据库命中(使用模拟数据库结果填充模板)解决了问题,并且可以从主屏幕在应用程序中单击链接。


您可能想看看这个:https://gist.github.com/1042026 https://gist.github.com/1042026

// by https://github.com/irae
(function(document,navigator,standalone) {
    // prevents links from apps from oppening in mobile safari
    // this javascript must be the first script in your <head>
    if ((standalone in navigator) && navigator[standalone]) {
        var curnode, location=document.location, stop=/^(a|html)$/i;
        document.addEventListener('click', function(e) {
            curnode=e.target;
            while (!(stop).test(curnode.nodeName)) {
                curnode=curnode.parentNode;
            }
            // Condidions to do this only on links to your own app
            // if you want all links, use if('href' in curnode) instead.
            if('href' in curnode && ( curnode.href.indexOf('http') || ~curnode.href.indexOf(location.host) ) ) {
                e.preventDefault();
                location.href = curnode.href;
            }
        },false);
    }
})(document,window.navigator,'standalone');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阻止离线 iPhone Web 应用程序在 Safari 中打开链接 的相关文章

  • 如何处理过时的连接?

    我们的应用程序是一个 J2EE 应用程序 在 Websphere 6 1 上通过 Mainframe DB2 后端使用 Struts EJB Hibernate 最近已投入生产 我们收到过时的连接异常当用户第一次或有时登录应用程序时 此异常
  • 跨页面加载跟踪子窗口

    如果重新加载父页面 是否可以跟踪子窗口 我目前打开窗口如下 var childWindow childWindow window open url 当我想重新打开同一个子窗口时 childWindow focus 明显的问题是 如果刷新父窗
  • iOS safari 输入插入符号颜色

    我在 iPhone 设备上使用 Safari 时遇到了一个 CSS 小问题 我的搜索输入是蓝色的 当用户关注它时 插入符号几乎看不见 在所有桌面浏览器中 它都有正确的颜色 白色 即使在桌面 Safari 上也是如此 知道如何修复此问题并更改
  • 如何修复 iOS 11 和 macOS V10.12 Safari 上损坏的变换原点?

    我正在尝试使用 svg 来实现 CSS 动画 我期望 2 个 svg 盒子正在旋转 旋转 transform origin center center 360度 看起来它在 Chrome 和 Firefox 上的表现符合我的预期 但在 ma
  • 在 DDD 中,表示层可以同时使用 Repository 和 Service 类吗?

    如果表示层只应该使用服务 那么服务类必须公开存储库已实现的相同方法 以使它们可供表示层使用 这似乎是错误的 有人可以帮我澄清一下吗 我敢打赌 这似乎是错误的 因为您实际上并不需要这种抽象级别 应用服务有facades http en wik
  • Safari 中的日期无效

    alert new Date 2010 11 29 chrome ff 对此没有问题 但 safari 会喊 无效日期 为什么 编辑 好的 根据下面的评论 我使用了字符串解析并尝试了这个 alert new Date 11 29 2010
  • 从 .NET Core 1.1.1 升级到 .NET Core 1.1.2 后,Azure 上的 ASP.NET Core 网站无法启动并出现 502.5 错误

    我有一个 NET Core Web 应用程序 我将其部署为 Azure Web 应用程序 直到昨晚我应用 Visual Studio 2017 升级 v15 2 为止 这一直工作得很好 net core版本从1 1 1升级到1 1 2 当我
  • 如何在两个或多个 Servlet 之间共享变量或对象?

    我想知道是否有某种方法可以在两个或多个 Servlet 之间共享变量或对象 我的意思是某种 标准 方法 我认为这不是一个好的做法 但却是构建原型的更简单的方法 我不知道这是否取决于所使用的技术 但我会使用 Tomcat 5 5 我想共享一个
  • 网站性能衡量

    我需要一个免费的工具来测量网站的性能 并且不需要对代码 jsp asp 页面 进行任何更改 感谢所有帮助 对于绩效衡量 我建议您YSlow http developer yahoo com yslow 它是一个 Firefox 插件 集成了
  • 在 Safari 中转换变换和大小 (9.1)

    我试图在元素上实现平滑过渡transform translate 和一些其他属性 是的 我读过有关匹配供应商前缀的内容 它在 Chrome 和 FF 中工作正常 但在 Safari 中它不能平滑地动画转换 在最后跳转 在应用翻译之前 它似乎
  • 如何从办公文档迁移到基于现代网络技术的文档 - 欢迎建议

    目前 所有文档均基于 MS Office 如果您想集成某些功能 这将变得非常具有挑战性 然后您可以选择使用 VBA 或 VSTO 第一个不太舒服 第二个可能就像拿大锤敲碎坚果一样 简单的控件 隐藏文本或基本数学等简单的事情都可以通过 HTM
  • Web应用程序结构和部署

    我们的产品是一个 ASP Net Web 应用程序 目前 我们在 Visual Studio 中使用网站项目 但研究使用 Web 应用程序项目已经有一段时间了 我目前正在研究它们 以便我们能够改进我们的部署过程 我们有一个在不同客户之间共享
  • 如何区分浏览器选项卡中的会话?

    在使用 JSP 和 Servlet 以 java 实现的 Web 应用程序中 如果我在用户会话中存储信息 则同一浏览器的所有选项卡都会共享该信息 如何在浏览器选项卡中区分会话 在这个例子中
  • setInterval() 如何影响性能?

    我们正在使用 Twitter Bootstrap 作为框架构建一个 Web 应用程序 但在显示 隐藏工具提示时遇到问题 除了尝试找到实际问题的解决方案之外 我还有一个关于我们同时使用的解决方法的问题 从性能角度来看 使用 setInterv
  • 如何在 tomcat 上部署 Java Web 应用程序 (.war)?

    我有一个 warJava Web 应用程序的文件 现在我想将它上传到我的 ftp 服务器 以便我可以执行它 我应该执行哪些步骤来运行它 webapp的上下文路径是 mywebapp Edit 实际上 我的 ftp 服务器名称是ftp bil
  • Python。短语表示,如何改变?

    我不知道这个短语中存在的编码是什么 我也想知道这个问题的答案 主要是 我想改变我的措辞 例如 你好世界 变成你好 20世界 0A 老天啊 变成ol C3 A1 20mundo 0A 0A 我想要一个 python 解决方案 如果我有 gt
  • ASP.NET - Google Chrome 缓存 DropDownList 选择

    我的购物车页面上的 Google Chrome 和 Safari 似乎遇到了缓存问题 购物车中有 2 个下拉列表 当您在更改下拉列表中的值后点击结帐按钮时 它会将列表中选择的内容提交到数据库 解释意外的行为有点困难 所以我会尝试一步一步地写
  • Safari 中的 javascript 页面刷新

    我正在尝试弄清楚如何使用 javascript 刷新 Safari 5 1 中的页面 但似乎没有任何效果 到目前为止 我已经尝试过 窗口 位置 href 窗口 位置 href 窗口位置 窗口位置 href window location r
  • Safari 滚动条和 SVG

    问题 Safari 无法正常工作 而是使用滚动条渲染我的 SVG 图像 问题的改进版本 如何填充设定的宽度并根据 Safari 中的宽高比计算高度 感谢普罗格兹 相关代码 SVG File viewBox 0 0 800 800 未指定高度
  • @font-face 和 font-variant 是个坏主意吗?

    如果我使用 font face字体和font variant small caps对于相同的选择器 字体将回退到 Safari 中的下一个系统默认字体 我该如何解决这个问题 我一开始在创建一个示例来复制您的问题时遇到了一些麻烦 这让我意识到

随机推荐

  • 以编程方式快速向工具栏添加按钮

    我很难快速地向工具栏添加一个按钮 下面你可以看到我想要的工具栏的图像 不幸的是 即使我在故事板文件中设计了它 它也不会显示在将工具栏设置为可见 我设计的方式有两个项目 第一个是flexable space元素 第二个是add元素 它看起来像
  • HttpServletRequest#getRemoteAddr() 返回 NULL

    为什么HttpServletRequest getRemoteAddr http docs oracle com javaee 6 api javax servlet ServletRequest html getRemoteAddr 28
  • 大矩阵计算

    我用 C 编写了一个简单的代码 然后在 linux ubuntu 11 04 上用 g 编译它 没有收到任何错误 但是当我运行可执行文件时 收到此错误 分段错误 我知道我的代码没有问题 并且这个错误与编译器有关 有人可以帮助我吗 我的代码是
  • RTMP:有这样的linux命令行工具吗?

    我到处寻找一个可以让我下载 rtmp 流的 Linux 实用程序 不是 flv 视频而是 MP3 流 我想要下载的流的位置就是这种格式 rtmp live site com loc 45 std fc74a6b7f79c70a5f60 mp
  • 如何在 bazel 中指定 cc_library 的输出工件?

    我想将 foo c 构建为库 然后在生成的 so上执行 readelf 而不是 a 我如何在bazel中编写它 以下 BUILD bazel 文件不起作用 cc library name foo srcs foo c genrule nam
  • 8 拼图有多少种可能的状态?

    经典的 8 块拼图属于滑块家族 我的书 人工智能 一种现代方法 作者 斯图尔特 拉塞尔 Stuart Russell 和彼得 诺维格 Peter Norwig 说 8 个难题9 2可能的状态 但为什么 2 你怎么得到这个 9 是拼图的可能配
  • 从 vb.net 执行 python 脚本

    如何从 VB NET 代码中执行 python 脚本 我想使用 VB NET 为我的 python 脚本构建 GUI 这是为了能够为脚本用户创建 GUI 我找到了这个例子 Shell c Program Files python 266 p
  • Karma 无法加载 webpack

    我收到此错误 16 07 2015 13 03 52 741 WARN preprocess Can not load webpack Error Can not resolve circular dependency Resolving
  • 用于拨打电话的 Web API [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有可以打电话的API进行电话交谈在网络中 也许基于 Flash 例如 Skype 但无需安装软件
  • 在 PHP 中何时使用类与函数

    灯泡还没有亮起来 我真的很喜欢一个易于理解的解释 说明在 php 中使用类比仅使用函数的优势 这是我现在的想法的一个简单例子 我想知道一个类是否更有效 假设我有一个用 php 构建的迷你日历小部件 我正在考虑调用该函数miniCal arr
  • 无法从 WSL2 docker 容器连接到 WSL2 本地主机服务器

    我正在运行一个简单的网络服务器https 0 0 0 0 4000 https 0 0 0 0 4000 也可以作为https local phx cd shoeping at 4000 https local phx cd shoeppi
  • 如何在 AuthenticationTokenCreateContext 中设置错误?

    我必须在 AuthenticationTokenCreateContext 中设置错误 可以使用 context SetError 在 OAuthValidateClientAuthenticationContext 中设置错误 但在 Au
  • 使用 g++ 编译 c++14 代码

    我在 Ubuntu 14 04 LTS 上使用 g 4 8 4 当尝试使用 std c 14 进行编译时 出现以下错误 g error unrecognized command line option std c 14 使用 std c 1
  • 性能监视器 .NET CLR Networking 4.0.0.0 实例命名

    我正在尝试使用性能计数器来确定我的应用程序已发送或接收的字节数 我按照此处找到的建议解决方案进行操作 计算带宽 https stackoverflow com questions 442409 c bandwidth 但我的应用程序实例没有
  • C语言AVL树

    我目前正在做一个需要使用AVL树的项目 我为 avl 编写的插入函数似乎不起作用 它最多适用于 3 或 4 个节点 我将衷心感谢您的帮助 尝试如下 Tree insert Tree t char name 80 int num if t N
  • Android 的 Flutter 签名版本未打开,但所有调试版本都工作正常?

    应用程序的调试版本工作正常 但签名的版本未打开 安装签名版本后 它显示如下 然后无法移动到应用程序的启动屏幕 我尝试了堆栈溢出上可用的所有解决方案 但对于这种情况没有任何作用 None
  • Windows 8 WinRT KeyboardCapability.KeyboardPresent 始终为 true

    我们使用 KeyboardCapability KeyboardPresent 来测试键盘是否连接到设备 bool hasKeyboard new KeyboardCapabilities KeyboardPresent 1 不幸的是 无论
  • 页面加载后 Jquery addClass

    我想知道为什么执行 jQuery 代码addClass页面渲染后的函数 我有一些元素 h1 绝对定位 该元素有规则 left 60 和简单的JS document ready function test find header find h
  • Spring Cloud Gateway 或 Zuul2,哪一个是 Zuul1 的正确替代品?

    由于 Spring Cloud 团队已经放弃了 Zuul 模块的开发 我们正在转向 Spring Cloud Gateway 或 Zuul2 但我相信 Zuul2 需要在架构上进行大量更改 并且需要在微服务上进行重大更改 如果我错了 请纠正
  • 阻止离线 iPhone Web 应用程序在 Safari 中打开链接

    我正在开发一个可以在离线模式下与移动 Safari 配合使用的网站 我可以将其添加到主屏幕上并从那里加载 但是 一旦从主屏幕打开 单击某些链接将跳出应用程序并在移动 safari 中打开 尽管我在所有链接单击上阻止了 Default 该应用