gpt4 book ai didi

safari - 防止离线 iphone webapp 在 Safari 中打开链接

转载 作者:行者123 更新时间:2023-12-01 10:14:54 27 4
gpt4 key购买 nike

我正在开发一个可以在离线模式下使用移动 safari 的网站。我可以将它添加到主屏幕并从那里加载。但是,一旦从主屏幕打开,点击某些链接将跳出应用程序并在移动 safari 中打开——尽管我在所有链接点击时都阻止了默认()!

该应用程序在 <body> 处绑定(bind)了一个 onclick 事件处理程序等级。使用事件委托(delegate),它捕获任何链接上的任何点击,查看其 href(例如“帮助”或“评论”),并动态调用 javascript 模板并更新页面。事件处理程序在事件对象上调用 preventDefault()——对于一些链接有效,并且页面使用模板输出更新。但是,对于在输出模板结果之前导致命中本地数据库的链接,链接在移动版 safari 中打开。

在桌面版 safari 中,即使我处于离线状态,所有链接也能正常工作——发生了一些特定于移动版 safari 的事情。

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

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

最佳答案

您可能想看看这个: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');

关于safari - 防止离线 iphone webapp 在 Safari 中打开链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1933575/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com