Ссылки не открываются во внешнем браузере в JQuery Mobile с помощью PhoneGap
У меня проблема с PhoneGap 2.3.0 с JQuery Mobile 1.2.0.
Любая внешняя ссылка iniOS открывается внутри приложения, а не открывает Safari, которые они открывают внутри приложения, что делает невозможным возвращение пользователя в приложение без его перезагрузки.
Я попробовал как rel= "external" , так и target = "_ blank" , чтобы указать внешнюю ссылку, но ни один из них не был успешным.
Я видел, что по умолчанию метод PhoneGap с JQMobile должен действовать так, как я хочу. Я нашел множество запросов для такого поведения, но не так.
Ответы
Ответ 1
Я добавил 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, но я не тестировал это.
=============================================== ===================================
UPDATE
В 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
Ответ 2
Если вы не хотите переопределять классы или копать слишком глубоко в коде, как было предложено, попробуйте это. Это работало как прелесть для меня. Я использую 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
из якоря, который вы пытаетесь загрузить в сафари. Опять же, здесь нет ничего необычного:
$(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/)
Ответ 3
То же решение, что и @KyleSimmons, но просто встроенное и короче. а простое исправление. И отлично работает для меня.
<a href="http://www.google.com/" onclick="window.open(this.href,'_system'); return false;">Google</a>
Ответ 4
Чтобы открыть внешнюю ссылку в jQuery Mobile:
<a href="#" onclick="location.href='http://moorberry.net'; return false;" data-rel="external">Like this</a>