我用谷歌搜索了这个问题的几个变体,只能在使用 PhoneGap 或 jQuery mobile 的情况下找到答案。但是,我没有使用...只是普通的旧 html 和 javascript。
我正在尝试使用 window.open()... 从全屏网络应用程序启动移动 safari,而不是内联锚。无论我做什么,网址都会在网络应用程序中打开,而不是在 Safari 中。有没有人有什么建议?
谢谢。
我用谷歌搜索了这个问题的几个变体,只能在使用 PhoneGap 或 jQuery mobile 的情况下找到答案。但是,我没有使用...只是普通的旧 html 和 javascript。
我正在尝试使用 window.open()... 从全屏网络应用程序启动移动 safari,而不是内联锚。无论我做什么,网址都会在网络应用程序中打开,而不是在 Safari 中。有没有人有什么建议?
谢谢。
我花了一段时间,但我能够把这个解决方案拼凑在一起。在 iOS 独立网络应用程序模式中,它使用 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');
}
从 iOS 4.3 开始,我知道的唯一方法是将 转换<div>
为 an<a target="_blank">
并让默认浏览器处理它。它将新页面启动到外部 Safari 中。
在 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 ];
}
}
你试过使用window.openNative()
吗?
如果您无法创建标准 HTML 链接,但必须以编程方式打开 Safari(仅使用 Javascript 代码),代码如下:
var a = document.createElement("a");
a.setAttribute('href', facebook);
a.setAttribute('target', '_blank');
a.click();
你不能使用普通的 A HREF 标签吗?这通常会从 web 应用程序中打开 Safari。