我刚刚升级到PhoneGap 1.6.1,我无法再在Safari中打开外部网址。
在此版本之前,我修改了AppDelegate.m,如下所示:
- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL *url = [request URL];
if ([[url scheme] isEqualToString:@"http"]) {
[[UIApplication sharedApplication] openURL:url];
return NO;
} else {
return [self.viewController webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
}
}
我注意到之前曾提出类似的问题: How can I open an external link in Safari not the app's UIWebView?
但我觉得这个答案不再适用于版本1.6.1。
我也尝试在Cordova.plist中设置OpenAllWhitelistURLsInWebView,但两种设置都没有给我Safari。
提前致谢。
答案 0 :(得分:40)
在新网址中打开链接的最佳方式实际上是window.open
。只需将目标设置为“_system”:
window.open("http://stackoverflow.com", "_system");
在我在文档中找到这个之前,我实际上写了一个插件来做同样的事情。我将在这里留下这个答案,因为这样可以更精细地控制链接的处理。
使用PhoneGap 2.3+,我无法以任何方式在Mobile Safari中打开网址。使用_blank不起作用,我尝试了window.open(url,'_ blank'),但现在使用InAppBrowser插件打开URL(这非常糟糕)。我觉得有趣的是,那个人使用了一个插件,所以我决定使用在iOS应用程序中打开URL的标准方法编写一个打开URL的插件。您可以在this gist here: https://gist.github.com/typeoneerror/5097118上查看/获取代码。
在我的示例中,我使用jQuery连接了一个名为“_blank”的类的链接,并使用插件调用打开了这些URL:
// execute the plugin called OpenUrl, signature:
// exec(successCallback, errorCallback, pluginName, pluginMethod, params)
cordova.exec(success, error, "OpenUrl", "openUrl", [url]);
答案 1 :(得分:9)
我在MainViewController.m
中使用过它- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL *url = [request URL];
NSString *str = url.absoluteString;
NSRange range = [str rangeOfString:@"http://"];
//HACK to make url open in safari
if (range.location != NSNotFound) {
[[UIApplication sharedApplication] openURL:url];
return NO;
}
else {
return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
}
答案 2 :(得分:8)
在早期版本的cordova中,您可以通过在链接中添加target =“_ blank”来在浏览器中加载网址。但现在您可以使用inApp浏览器功能。
var ref = window.open(encodeURI('your url'), '_system', 'location=no');
这会在浏览器中打开网址。使用 cordova2.7.0
在 Android 和 iPhone 中进行测试答案 3 :(得分:6)
升级到Cordova 1.6.1后出现同样的问题。
尝试添加
target="_blank"
到你的链接。
这对我有用。
答案 4 :(得分:4)
我设法使其适用于此设置:
<强> 1 强> 将以下行添加到config.xml - PhoneGap 3.1及更高版本:
<gap:plugin name="org.apache.cordova.inappbrowser" />
<强> 2 强> 之后你可以这样做:
<a onclick="window.open("http://www.yoururl.com/", "_system");">Link</a>
答案 5 :(得分:3)
尝试简化解决方案,这就是我最终使用的PhoneGap / Cordova 2.5.0和jQuery 1.9.1
<a target="_system" href="https://rads.stackoverflow.com/amzn/click/com/B009CZICQ8" rel="nofollow noreferrer">
然后我致电:
$("a[target='_system']").click(function(event) {
event.preventDefault();
window.open($(this).attr("href"), "_system");
});
答案 6 :(得分:3)
这样做:
<a href="http://www.google.com/" onclick="window.open(this.href,'_system'); return false;">Google</a>
答案 7 :(得分:2)
使用Phonegap / Cordova 1.7我已经能够通过JavaScript在外部浏览器中打开URL:
window.location.href = "http://www.google.com";
我还在Cordova.plist中将OpenAllWhitelistURLsInWebView设置为NO
答案 8 :(得分:2)
如果您使用的是Phonegap(在iOS 6中测试过),这是100%保证的解决方案。
要在Safari中打开外部URL,请执行以下操作:
http://google.com/
Cordova.plist
或Phonegap.plist
中,将OpenAllWhitelistURLsInWebView
从Yes
更改为No
。在您的应用中,将target="_blank"
添加到您的链接中。例如:
<a href="http://google.com" target="_blank">Google.com</a>
谢谢。
答案 9 :(得分:2)
今天使用此设置解决:
然后按照以下步骤操作:
<a href='http://www.arsdigitalia.it' target='_blank'>Go to my nice website</a>
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
window.open = cordova.InAppBrowser.open;
}
window.addEventListener('load', function () {
$(document).on('click', 'a[target="_system"],a[target="_blank"]', function (e) {
e.preventDefault();
var url = this.href;
window.open(url,"_system");
});
}
}, false);
答案 10 :(得分:1)
我认为这个方法曾经在/Classes/[yourAppName]AppDelegate.m中,现在它位于/Classes/MainViewController.m只是将它移到那里看它是否有效。
答案 11 :(得分:1)
在Safari中打开外部URL 请执行以下步骤。
1)。在外部主机(白名单)中添加链接。带完整网址
如果你想谷歌网址然后添加
例如:http://google.com/
2)。在Cordova.plist或Phonegap.plist中,更改
OpenAllWhitelistURLsInWebView,从Yes到No
for Android True to false。
3)。编写此代码以打开URL
window.location.href = "http://www.google.com";