Javascript iPad web应用程序在Safari中打开链接后冻结

Javascript iPad web应用程序在Safari中打开链接后冻结,javascript,jquery,ipad,freeze,iphone-standalone-web-app,Javascript,Jquery,Ipad,Freeze,Iphone Standalone Web App,我开发了一个在我的浏览器(Firefox、Chrome、iPad上的Safari)中完美运行的小型web应用程序。然后我决定修改这个应用程序,让它在我的iPad上作为一个独立的web应用程序运行。这没有问题,因为我在网上找到了非常好的信息 因为我使用了许多应用程序内部链接,所以我在应用程序中添加了以下JavaScript jQuery代码: if (window.navigator.standalone) { // running as web app $(function (

我开发了一个在我的浏览器(Firefox、Chrome、iPad上的Safari)中完美运行的小型web应用程序。然后我决定修改这个应用程序,让它在我的iPad上作为一个独立的web应用程序运行。这没有问题,因为我在网上找到了非常好的信息

因为我使用了许多应用程序内部链接,所以我在应用程序中添加了以下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窗口(如预期的那样)。但是当我切换回我的应用程序时(使用四个手指的手势),应用程序被冻结:没有滚动,没有可点击,没有任务切换,没有五个手指的手势。当我按下主页按钮时,iPad会在瞬间显示我的主页屏幕,然后立即切换到iPad搜索屏幕。当我关闭和再次打开屏幕时,我在主屏幕上

唯一有效的手势是打开任务栏的四个手指手势(这是任务栏的名称吗?)。当我使用任务栏终止应用程序时,它仍然在屏幕上,iPad的行为就像我没有终止应用程序一样(见最后一段)。感觉应用程序以某种疯狂的方式崩溃了

我不知道我做错了什么。这是一个非常简单的网页,只有很少的JavaScript和没有深度嵌套的HTML结构

该设备是一款iPad23G和iOS5.1


有人能帮我吗?

所以在阅读此链接之前,我给出了以下代码:

你试过了吗


我先前的答复是:

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;});

        }
    });
  });
}

因此,在阅读此链接之前,我给出了以下代码:

你试过了吗


我先前的答复是:

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
,外部链接有不同的域。但为什么所有应用程序内链接都有JS替换?为什么不将外部链接替换为“抱歉,您不在线”警告如果这是您需要的,我不确定您是否正确理解内部和外部链接的含义。如果为iOS开发独立的web应用程序,则该web应用程序不会显示在正常的浏览器窗口中。它具有本地应用程序的外观和感觉(如果编程良好)。但是如果你点击一个普通的链接(不管它去哪里),iOS会打开Safari来跟踪这个链接(我称之为外部链接)。如果您想导航到应用程序中的另一个页面,则必须使用JavaScript替换当前页面的URL。看右边。这是清楚的。谢谢那么,除了使用jQuery语法之外,我的代码与您提供的链接完全相同。这些代码片段都不起作用——不是我的代码,不是您的代码,也不是您在回答中提到的代码。我认为这是iOS上常见的多任务问题。中的问题似乎有相同的原因。替换的
href
实际上是我的JS代码的第二个版本。第一个看起来更像你建议的。我更改它是因为我想确保错误的事件处理不会导致错误。应用程序内链接类似于
/?skip=50&order=title
,外部链接有不同的域。但为什么所有应用程序内链接都有JS替换?为什么不将外部链接替换为“抱歉,您不在线”警告如果这是您需要的,我不确定您是否正确理解内部和外部链接的含义。如果为iOS开发独立的web应用程序,则该web应用程序不会显示在正常的浏览器窗口中。它具有本地应用程序的外观和感觉(如果编程良好)。但是如果你点击一个普通的链接(不管它去哪里),iOS会打开Safari来跟踪这个链接(我称之为外部链接)。如果您想导航到应用程序中的另一个页面,则必须使用JavaScript替换当前页面的URL。看右边。这是清楚的。谢谢那么,除了使用jQuery语法之外,我的代码与您提供的链接完全相同。这些代码片段都不起作用——不是我的代码,不是您的代码,也不是您在回答中提到的代码。我认为这是iOS上常见的多任务问题。中的问题似乎有相同的原因。