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。

window.open 总是在 iPad 版 Mobile Safari 中打开新标签页

使用 iPad 调试移动 Web 应用程序?

iPhone iPad 未检测到 ASP.Net MVC 应用程序中的浏览器类型