我在使用JQuery Mobile 1.2.0的PhoneGap 2.3.0中遇到了问题。
任何外部链接iniOS都会在应用内打开,而不是打开他们在应用内打开的Safari,这样用户就无法重新启动它而无法重新启动它。
我已经尝试了 rel ="外部" 和目标=" _blank" 来表明它是一个&#39>外部链接,但没有成功。
我已经看到PhoneGap与JQMobile应该采取行动的默认方式是我想要的方式。我发现了很多关于这种行为的请求,但没有找到方法。
答案 0 :(得分:14)
我在我的主播链接中添加了rel="external"
。
然后添加/覆盖了shouldStartLoadWithRequest
类中的MainViewController
方法:
- (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];
}
}
在jQuery Mobile 1.2和Phonegap 2.2.0中对我有用。它应该在Phonegap 2.3.0中也一样 - 但我没有测试过。
=============================================== ===================================
<强>更新强>:
在Phonegap 2.7.0或更高版本中可能没有必要这样做。 Phonegap现在可以在UIWebView,Safari或InAppBrowser组件中打开链接。我个人喜欢InAppBrowser组件,因为它似乎是一个更好的用户体验,适用于很多用例。如果您想在Safari中打开链接,现在可以使用Javascript执行此操作:
window.open('http://whitelisted-url.com', '_system');
或InAppBrowser:
window.open('http://whitelisted-url.com', '_blank');
请点击此处了解更多信息:
http://wiki.apache.org/cordova/InAppBrowser http://docs.phonegap.com/en/2.7.0/cordova_inappbrowser_inappbrowser.md.html#InAppBrowser
答案 1 :(得分:7)
如果您不想覆盖类或根据建议深入挖掘代码,请尝试此操作。它对我来说就像一个魅力。我正在使用Phonegap Build和jQuery Mobile。
*注意 - 我尝试了几种直接向锚标签添加属性的方法,例如<a href="http://externalsite.com target="_blank" data-rel="external" data-ajax="false">
也尝试了target="_system
- 但没有一个有效,所以我不得不使用javascript(虽然只有5行)。
这不是太复杂,但我会引导你完成它......
您需要阻止锚标记的默认行为。所以不知怎的抓住你关心的标签。我在外部打开的所有锚标签中添加了一个名为“external”的类。非常标准的东西:
$(document).on('click', ".external", function (e) {
e.preventDefault();
};
然后从您尝试在Safari中加载的锚点中获取href
值。再说一遍,这里没有太多花哨的东西:
$(document).on('click', ".external", function (e) {
e.preventDefault();
var targetURL = $(this).attr("href");
};
这是一个需要挖掘的东西 - 我猜Phonegap用2.3改变了他们的方法?无论如何,在新窗口中打开抓取的href
(这里是"_system"
进来的地方):
$(document).on('click', ".external", function (e) {
e.preventDefault();
var targetURL = $(this).attr("href");
window.open(targetURL, "_system");
});
就是这样。最后一点代码就是一切。至少这对我有用。
祝你好运!(在信用到期时给予信任,这是最有帮助的:http://www.midnightryder.com/launching-external-urls-in-phonegap-again-phonegap-2-4-x/)
答案 2 :(得分:7)
与@KyleSimmons相同的解决方案,但只是内联,更短。但一个简单的修复。对我来说很有用。
<a href="http://www.google.com/" onclick="window.open(this.href,'_system'); return false;">Google</a>
答案 3 :(得分:-1)
在jQuery Mobile中打开外部链接:
<a href="http://moorberry.net" data-rel="external">Like this</a>