我在一些变体中搜索了这个问题,只能在使用PhoneGap或jQuery mobile的环境中找到答案。但是,我不使用...只是简单的旧HTML和JavaScript。
我正在尝试使用window.open()从全屏网页应用启动移动版Safari ...而不是内联锚。无论我做什么,网址都会在网页应用中打开,而不是在Safari中。有没有人有任何建议?
感谢。
答案 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();