JavaScript 实现阻止 iOS Web APP 中链接跳转 Safari 浏览器

作者:白露

时间:2026-10-28

浏览:413

本文介绍如何在 iOS Web APP 模式下,通过一段 JavaScript 代码阻止内部链接自动打开 Safari 浏览器。该方法利用 window.navigator.standalone 判断运行环境,拦截点击事件并重新在当前应用内加载页面,从而保持应用沉浸感。经测试兼容 iOS 6.1.4 至 7.1 版本,建议将代码置于 head 标签前或独立 JS 文件中。

文章目录

问题背景与描述

此前,参考网络教程为网站开发了 Web APP 功能,但用户体验却不尽如人意。

问题描述:

具体表现为:在 Web APP 主页点击任意链接时,系统会强制启动 Safari 浏览器打开新标签页。这一行为破坏了原本精心设计的 Web APP 界面体验,导致用户感知断裂。解决此问题的方法其实非常直接,只需添加特定的代码片段即可。经实测,该方案在 iPhone (iOS 7.1) 和 iPod (iOS 6.1.4) 上运行正常。据原作者反馈,iOS 7.0.4 版本(涵盖 iPhone 与 iPad)亦测试通过,代码具备良好的兼容性,特此分享。

解决方案:

代码实现与部署建议

具体代码实现如下:

<script type="text/javascript">
// 解决 iOS Web APP 中点击链接跳转至 Safari 浏览器新标签页的问题
if (("standalone" in window.navigator) && window.navigator.standalone) {
var noddy, remotes = false;
document.addEventListener('click',
function(event) {
noddy = event.target;
while (noddy.nodeName !== "A" && noddy.nodeName !== "HTML") {
noddy = noddy.parentNode;
        }
if ('href' in noddy && noddy.href.indexOf('http') !== -1 && (noddy.href.indexOf(document.location.host) !== -1 || remotes)) {
event.preventDefault();
document.location.href = noddy.href;
        }
    },
false);
}
</script>

建议将此代码放置在 <head> 标签结束前;或者将其保存为独立的 JS 文件并通过 script 标签引入亦可。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章