从iPhone上的全屏网络应用程序启动移动Safari

时间:2011-03-24 17:51:16

标签: javascript iphone iphone-standalone-web-app

我在一些变体中搜索了这个问题,只能在使用PhoneGap或jQuery mobile的环境中找到答案。但是,我不使用...只是简单的旧HTML和JavaScript。

我正在尝试使用window.open()从全屏网页应用启动移动版Safari ...而不是内联锚。无论我做什么,网址都会在网页应用中打开,而不是在Safari中。有没有人有任何建议?

感谢。

6 个答案:

答案 0 :(得分:2)

我花了一段时间,但我能够将这个解决方案拼凑在一起。在iOS独立Web应用程序模式下,它使用jQuery创建一个链接元素,将其添加到正文,模拟对其的单击,然后删除链接。你可以在没有jQuery的情况下完成同样的事情,只需要使用天真的DOM方法就可以获得更多的代码。

if (window.navigator.standalone) {
  var $a = $('<a href="' + url + '" target="_blank"/>');
  $("body").append($a);

  var a = $a.get(0);

  var mouseEvent = a.ownerDocument.createEvent('MouseEvents');
  mouseEvent.initMouseEvent('click');
  a.dispatchEvent(mouseEvent);

  $a.remove();
}
else {
  window.open(url, '_blank');
}

答案 1 :(得分:1)

从iOS 4.3开始,我知道的唯一方法是将<div>转换为<a target="_blank">并让默认浏览器处理它。它将新页面启动到外部Safari。

答案 2 :(得分:1)

在PhoneGap中,默认情况下所有URL都加载到WebView中。使用JS设置目标或使用它不会破坏WebView中的外部链接。为了将外部URL加载到Safari而不是PhoneGap应用程序本身,您需要修改应用程序委托中URL的处理方式。

打开PhoneGap应用程序代码,找到[projectname] AppDelegate.m ...通常位于[projectname] / Classes文件夹下。

根据需要修改shouldStartLoadWithRequest。下面是一个示例实现,它将评估请求并处理在Safari中加载的HTTP或HTTPS方案(从http://solutions.michaelbrooks.ca/2011/02/15/open-external-links-in-safariapp/借来):

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];

    // Intercept the external http requests and forward to Safari.app
    // Otherwise forward to the PhoneGap WebView
    if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }
    else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
    }
}

答案 3 :(得分:0)

您是否尝试过使用window.openNative()

答案 4 :(得分:0)

你不能使用正常的A HREF标签吗?这通常会在webapp中打开Safari。

答案 5 :(得分:0)

如果您无法创建标准HTML链接,但必须以编程方式打开Safari(仅使用Javascript代码),请输入以下代码:

var a = document.createElement("a");
a.setAttribute('href', facebook);
a.setAttribute('target', '_blank');
a.click();