我在使用 JQuery Mobile 1.2.0 的 PhoneGap 2.3.0 中遇到问题。
iOS 中的任何外部链接都会在应用程序内部打开,而不是在应用程序内部打开它们打开的 Safari,这使得用户无法在不重新启动应用程序的情况下返回应用程序。
我已经尝试过rel="external"和target="_blank"来表明它是一个外部链接,但都没有成功。
我已经看到带有 JQMobile 的 PhoneGap 应该采取的默认方式是我想要的方式。我发现很多对这种行为的要求,但不是这样。
我在使用 JQuery Mobile 1.2.0 的 PhoneGap 2.3.0 中遇到问题。
iOS 中的任何外部链接都会在应用程序内部打开,而不是在应用程序内部打开它们打开的 Safari,这使得用户无法在不重新启动应用程序的情况下返回应用程序。
我已经尝试过rel="external"和target="_blank"来表明它是一个外部链接,但都没有成功。
我已经看到带有 JQMobile 的 PhoneGap 应该采取的默认方式是我想要的方式。我发现很多对这种行为的要求,但不是这样。
我添加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
如果您不想按照建议覆盖类或深入挖掘代码,请尝试此操作。它对我来说就像一个魅力。我正在使用 Phonegap Build 和 jQuery Mobile。
*注意 - 我尝试了其他几种将属性直接添加到锚标记的方法,例如<a href="http://externalsite.com target="_blank" data-rel="external" data-ajax="false">也尝试过target="_system- 但没有一个奏效,所以我不得不使用 javascript(虽然只有 5 行)。
这不是太复杂,但我会引导你完成它......
您需要防止锚标记的默认行为。所以以某种方式抓住你关心的标签。我向我想在外部打开的所有锚标记添加了一个名为“外部”的类。很标准的东西:
$(document).on('click', ".external", function (e) {
e.preventDefault();
};
然后href从您尝试在 Safari 中加载的锚点中获取值。同样,这里没有什么太花哨的添加:
$(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/)
与@KyleSimmons 相同的解决方案,但只是内联且更短。但一个简单的修复。对我很有用。
<a href="http://www.google.com/" onclick="window.open(this.href,'_system'); return false;">Google</a>
在 jQuery Mobile 中打开外部链接:
<a href="http://moorberry.net" data-rel="external">Like this</a>