代码之家  ›  专栏  ›  技术社区  ›  Juriy

Mobile Safari-抑制不支持的协议警报

  •  3
  • Juriy  · 技术社区  · 15 年前

    我正在为iphone创建一个网站,我使用本地应用程序(cliqcliq quickpick)上传照片。我使用如下脚本检查应用程序是否已安装。基本思想是将用户发送到一个自定义的url,如果应用程序在那里,它将被启动,如果不在那里,url应该被忽略,用户将被带到app store。以下是脚本:

    window.launchQuickpic = function() {
        var start = new Date();
     setTimeout(function() {
         if (new Date() - start > 2000) {
         return;
        }
        window.location = 'http://www.cliqcliq.com/quickpic/install/';
    }, 1000);
    
        var getParams = [...];
        window.location = 'vquickpic://?' + getParams.join('&');
    };
    

    如果没有安装本机应用程序,我会收到一个警告框,说Safari无法识别自定义URL。用户点击“确定”后,它会按预期工作。但是警报真的很烦人。

    我试过用try/catch包围窗口。location=code。没有帮助。

    3 回复  |  直到 11 年前
        1
  •  0
  •   TechZen    15 年前

    如果我理解正确的话,你看到了预期的行为。

    如果没有安装应用程序,则系统不知道它应该如何处理以“vquickpic://”开头的url。这就是为什么您会收到错误消息。

    我想你看到的是你先把窗口的位置设为 http://www.cliqcliq.com/quickpic/install/ '但在加载完成之前,请尝试切换到window.location到'vquickpic://'。这将生成一个错误,当您解除警报时,webview将继续加载第一个url。

    这里的主要问题是,错误来自iphone操作系统本身,而无法从网页内的javascript访问该操作系统。网页无法询问iphone是否安装了特定的应用程序或是否可以执行特定的操作。

    我认为最好的办法是告诉用户,如果安装了本机应用程序,单击该链接将尝试启动该应用程序,但如果他们收到错误,则需要关闭该链接并单击页面上的另一个链接来安装该应用程序。

        2
  •  0
  •   Delconis    11 年前

    我还没开始工作,但我认为这是你应该调查的事情。我相信这将压制这一信息。

    window.onerror = function(msg, url, linenumber) { return true; }
    

    我还读到一些地方,用户成功地执行了与上面类似的操作,但是他们不会返回true,而是将window.location切换回有效的位置,例如“about:blank”。不过,它们在实现中使用iframe。

        3
  •  -1
  •   Markos    14 年前

    或者你可以试试Opera Mini