iPad Web 应用程序在 Safari 中打开链接后冻结
Posted
技术标签:
【中文标题】iPad Web 应用程序在 Safari 中打开链接后冻结【英文标题】:iPad web app freezes after opening a link in Safari 【发布时间】:2012-04-11 18:08:42 【问题描述】:我开发了一个小型网络应用程序,它可以在我的浏览器(Firefox、Chrome、iPad 上的 Safari)中完美运行。然后我决定修改这个应用程序,让它在我的 iPad 上作为一个独立的网络应用程序运行。这没问题,因为我在网上找到了很好的信息。
因为我使用了很多应用程序内部链接,所以我在应用程序中添加了以下 javascript jQuery 代码:
if (window.navigator.standalone)
// running as web app
$(function ()
$('a').each(function ()
if (!$(this).hasClass('external'))
var href = $(this).attr('href');
$(this).attr('href', 'javascript:this.location = \'' + href + '\'');
);
);
如果应用程序在独立模式下运行,此代码会修改所有没有 CSS 类 external
的链接,因此它们不会在新的 Safari 窗口中打开。此代码运行良好。
问题是,如果我打开一个 外部链接,则会打开一个新的 Safari 窗口(如预期的那样)。但是当我切换回我的应用程序(使用四指手势)时,应用程序被冻结:没有滚动,没有可点击,没有任务切换,没有五指手势了。当我按下 Home 键时,iPad 会显示我的主屏幕片刻,然后立即切换到 iPad 搜索屏幕。当我关闭并再次打开屏幕时,我在主屏幕上。
唯一有效的手势是打开任务栏的四指手势(这是它的名字吗?)。当我使用任务栏终止应用程序时,它仍然在屏幕上,iPad 的行为就像我没有终止应用程序一样(参见最后一段)。感觉就像应用程序以某种疯狂的方式崩溃了。
我不知道我做错了什么。这是一个非常简单的网页,只有很少的 JavaScript 和没有深度嵌套的 html 结构。
设备是装有 ios 5.1 的 iPad 2 3G。
谁能帮我解决这个问题?
【问题讨论】:
【参考方案1】:所以我在阅读此链接之前给出了此代码:iPhone Safari Web App opens links in new window
你试过This answer吗?
我之前的回答:
if (window.navigator.standalone)
// running as web app
$(function ()
$('a').each(function ()
if (!$(this).hasClass('external'))
var href = $(this).attr('href');
$(this).click(function() window.location = href; return false;);
);
);
【讨论】:
href
替换实际上是我的 JS 代码的第二个版本。第一个看起来更像你建议的。我更改它是因为我想确保错误的事件处理不会导致错误。应用内链接类似于/?skip=50&order=title
,外部链接具有不同的域。
但是为什么要替换所有的应用内链接?如果这是您需要的,为什么不将外部链接替换为“抱歉您不在线”警报
我不确定您是否正确理解了我对内部和外部链接的含义。如果您为 iOS 开发独立的 Web 应用程序,则该 Web 应用程序不会显示在普通浏览器窗口中。它具有原生应用程序的外观和感觉(如果编程良好)。但是如果你点击一个普通的链接(不管它去哪里),iOS 会打开 Safari 来跟随那个链接(这就是我所说的外部链接)。如果您想导航到应用程序中的另一个页面,则必须使用 JavaScript 替换当前页面的 URL。见link
对。这很清楚。谢谢。那么我的代码与您提供的链接相同,除了使用 jQuery 语法
所有代码 sn-ps 都不起作用 - 不是我的代码,不是你的代码,不是你在答案中提到的代码。我认为这是 iOS 上常见的多任务处理问题。 this question 中的问题似乎有同样的原因。以上是关于iPad Web 应用程序在 Safari 中打开链接后冻结的主要内容,如果未能解决你的问题,请参考以下文章
使用 Phonegap 在 iPad 上的 safari 中打开外部 url
在 Iphone、Ipad 和使用 Safari 浏览器中 - 警报“使用 myapp 打开”
是否可以让 iOS 网络应用程序调用另一个常规应用程序来打开?适用于移动 Safari。