открытая ссылка на телефонный разговор в браузере

114
<a target="_blank" data-rel="external" href="http://www.kidzout.com">www.kidzout.com</a>

Привет, эксперты, я использую phonegap 2.9.0, и я использую приведенный выше код, чтобы открыть ссылку в браузере, но он открывает ее в том же приложении ...... как открыть его в браузере Safari?

он открывает веб-сайт в том же приложении, а затем я не могу вернуться в приложение, поэтому мне нужно удалить приложение и установить его снова ...

Ахсан Али
источник
Если вы хотите открыться _blankво внешнем браузере и _selfв WebView, проверьте мое решение 2015 года для Cordova 5.1.1: stackoverflow.com/a/32227524/82609
Себастьен Лорбер,
См. Также ответы на аналогичный вопрос: stackoverflow.com/a/26176013/1480587 и stackoverflow.com/a/46619378/1480587
Питер Т.

Ответы:

225

Как предлагается в аналогичном вопросе , используйте JavaScript для вызова window.openс targetаргументом, установленным _systemв соответствии с документацией InAppBrowser :

<a href="#" onclick="window.open('http://www.kidzout.com', '_system'); return false;">www.kidzout.com</a>

Это должно работать, хотя лучшим и более гибким решением было бы перехватить все clickсобытия ссылок и вызвать их window.openс аргументами, считываемыми из атрибутов ссылки.

Помните, что вы должны установить плагин InAppBrowser, чтобы это работало:

cordova plugin add cordova-plugin-inappbrowser
freejosh
источник
3
да, я тоже использовал ту же цель = "_ blank" в кордове 1.7.0, но теперь я работаю с 2.9.0, и это меня раздражает, ваше мнение тоже не сработало ...... :(
ахсан али
6
да, я тоже пробовал и следил по ссылкам, которыми вы поделились, спасибо за вашу помощь, но проблема все еще существует, сайт все еще открывается в приложении ...... :(
ахсан али
эй, ахсан, не могли бы вы подробнее рассказать, в чем была ваша проблема? Я думаю, у меня может быть такая же проблема.
whossname
3
Помните, что вы должны установить плагин InAppBrowser, чтобы это работало, инструкции здесь: cordova.apache.org/docs/en/3.0.0/…
jackocnr
7
У меня такая же проблема .. решение не работает :( открывается просто как обычная ссылка (на андроиде)
Даниэль
30

Как было сказано в других сообщениях, у вас есть два разных варианта для разных платформ. Что я делаю:

document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {

    // Mock device.platform property if not available
    if (!window.device) {
        window.device = { platform: 'Browser' };
    }

    handleExternalURLs();
}

function handleExternalURLs() {
    // Handle click events for all external URLs
    if (device.platform.toUpperCase() === 'ANDROID') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            navigator.app.loadUrl(url, { openExternal: true });
            e.preventDefault();
        });
    }
    else if (device.platform.toUpperCase() === 'IOS') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            window.open(url, '_system');
            e.preventDefault();
        });
    }
    else {
        // Leave standard behaviour
    }
}

Как видите, я проверяю платформу устройства и в зависимости от этого использую другой метод. В случае стандартного браузера я оставляю стандартное поведение. Отныне решение будет нормально работать на Android, iOS и в браузере, при этом HTML-страница не будет изменена, поэтому URL-адреса могут быть представлены в виде стандартного якоря.

<a href="http://stackoverflow.com">

Для решения требуются плагины InAppBrowser и Device.

krzychu
источник
Отличный ответ. На всякий случай, если это не для других, убедитесь, что на вашем www / cordova_plugins.js есть конфигурация устройства и inappbrowser. Когда я устанавливаю плагины, он добавляет конфигурации js и плагинов в промежуточную папку, а не в мою основную рабочую папку www. Как только я разобрался с конфигурацией и локациями, все заработало отлично.
Майкл Бордаш
1
Это лучший ответ! Пожалуйста, помните, что вы не устанавливали плагин InAppBrowser через:$ meteor add cordova:org.apache.cordova.inappbrowser@0.5.4
tixastronauta
Если кто-то захочет внести свой вклад в фрагмент, я загрузил его в gist. gist.github.com/redolent/e79722b32a48a536b5ba
благоухающий
28
<a onclick="navigator.app.loadUrl('https://google.com/', { openExternal:true });">Link</a>

У меня работает с android и PG 3.0

user2758937
источник
Кажется, у меня все еще не получается как на Android 2.3.7, так и на 4.2.2.
user569825
2
У меня работает на Android 4.4.2 с Cordova 3.3.0. Но не работает на iOS 6.1.
mytharcher
У меня работает cordova 3.3.0, спасибо, а откуда вы эту информацию взяли? Не нашел в документации.
Теоман шипахи
У меня это сработало с Cordova 3.4.1 и Android 4.2. Плагин мне не понадобился. Отчитаюсь после тестирования на iOS7.
pgsandstrom
Это единственное решение, которое сработало для меня на Android, спасибо
Нирадж Чаухан
21

Есть 2 разных способа открыть URL-адрес в android и iphone.

ДЛЯ IOS используйте следующий код.

window.open("http://google.com", '_system');

а для ОС Android используйте следующий код.

navigator.app.loadUrl("http://google.com", {openExternal : true});
Хасан Сиддик
источник
Кордова тоже может использовать window.open("http://google.com", '_system'). Вы не должны использовать navigator.app.loadUrl, потому что он не будет работать с market://URL-адресами: в этом случае он просто закроет ваше приложение и откроется в том же окне ... не всегда предпочтительнее.
Агамемнус 06
1
Agamemnus, window.open не работает на android в моем приложении phonegap 3.6. Мне нужно использовать решение из этого ответа, чтобы оно работало.
Moulde
10

Наконец-то этот пост помог мне на iOS: http://www.excellentwebworld.com/phonegap-open-a-link-in-safari-or-external-browser/ .

Откройте файл «CDVwebviewDelegate.m» и найдите «shouldStartLoadWithRequest», затем добавьте этот код в начало функции:

if([[NSString stringWithFormat:@"%@",request.URL] rangeOfString:@"file"].location== NSNotFound) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}

При использовании navigator.app.loadUrl("http://google.com", {openExternal : true});для Android все в порядке.

Через Кордову 3.3.0.

mytharcher
источник
Это единственное, что у меня работало в 3.0.0. Спасибо!!
Rocklan
В версии 3.0 вам необходимо включить плагин InAppBrowser. Как бы странно это ни казалось.
Шон Баннистер
Я бы изменил его на один уровень выше в MainViewController.m: - (BOOL) webView: (UIWebView *) theWebView shouldStartLoadWithRequest: (NSURLRequest *) request navigationType: (UIWebViewNavigationType) navigationType {NSURL * url = [request URL]; if ([[схема URL] isEqualToString: @ "файл"] || [[схема URL] isEqualToString: @ "пробел"]) {return [super webView: theWebView shouldStartLoadWithRequest: запрос navigationType: navigationType]; } еще {[[UIApplication sharedApplication] openURL: url]; вернуть НЕТ; }}
Gamadril
10

Ни один из этих ответов не является достаточно явным, чтобы внешние ссылки открывались на каждой платформе. В соответствии с inAppBrowser документы :

устанавливать

cordova plugin add cordova-plugin-inappbrowser

Перезаписать window.open (необязательно, но рекомендуется для простоты)

window.open = cordova.InAppBrowser.open;

Если вы не перезаписываете window.open, вы будете использовать встроенную window.openфункцию и не можете ожидать получения тех же результатов на разных платформах.

Используйте его, чтобы открывать ссылки в браузере по умолчанию

window.open(your_href_value, '_system');

Обратите внимание на то, что целью inAppBrowser (именно для этого и предполагается название плагина) является '_blank'вместо '_system'.


Без описанных выше шагов мне не удалось получить ссылки для открытия в кроссплатформенном браузере по умолчанию.

Дополнительный кредит

Вот пример (живого) обработчика кликов для ссылок:

document.addEventListener('click', function (e) {
    if (e.target.tagName === 'A' &&
        e.target.href.match(/^https?:\/\//)) {
        e.preventDefault();
        window.open(e.target.href, '_system');
    }
});
bozdoz
источник
Где именно вы переопределяете window.open? На веб-сайте или в приложении
Cordova
Желательно верхнюю часть вашего файла JavaScript, который вы загружаете на свою страницу index.html (ваш веб-сайт, если это помогает)
bozdoz
7

Если у вас есть jQuery, вы можете перехватить щелчок по ссылке следующим образом:

$(document).on('click', 'a', function (event) {
    event.preventDefault();
    window.open($(this).attr('href'), '_system');
    return false;
});

Таким образом, вам не нужно изменять ссылки в HTML, что может сэкономить много времени. Я установил это с помощью делегата, поэтому вы видите, что он привязан к объекту документа с тегом «a» в качестве второго аргумента. Таким образом будут обрабатываться все теги «a», независимо от того, когда они добавлены.

Конечно, вам все равно нужно установить плагин InAppBrowser:

cordova plugin add org.apache.cordova.inappbrowser
Мишель Рей
источник
это хорошая идея, которую я использую, но вы также должны позаботиться о прямых вызовах window.open (не все проходит через ссылку)
Себастьен Лорбер,
3
window.open('http://www.kidzout.com', '_system');

Будет работать, но только если у вас установлен плагин inappbrowser. Для установки с помощью терминала перейдите в папку www в вашем проекте и введите:

phonegap plugin add org.apache.cordova.inappbrowser

или

cordova plugin add org.apache.cordova.inappbrowser

Тогда ваша ссылка откроется в браузере.

Dev01
источник
Команда phonegap local <command>УСТАРЕЛА. Команда делегирована phonegap <command>. Команда phonegap local <command>скоро будет удалена.
Аджай Сувалка
Раньше я не знаю, но сейчас правильно устанавливать этот плагин cordova plugin add cordova-plugin-inappbrowser.
Plinio FM
2

В Cordova 5.0 и выше плагин InAppBrowser переименован в реестре плагинов Cordova, поэтому вы должны установить его, используя

cordova plugin add cordova-plugin-inappbrowser --save

Затем используйте

<a href="#" onclick="window.open('http://www.kidzout.com', '_system');">www.kidzout.com</a>

CodeVision
источник
1

Я использую PhoneGap Build (v3.4.0) с упором на iOS, и мне нужно было иметь эту запись в моем config.xml для PhoneGap, чтобы распознать подключаемый модуль InAppBrowser.

<gap:plugin name="org.apache.cordova.inappbrowser" />

После этого использование window.open (url, target) должно работать должным образом, как описано здесь .

contactmatt
источник
1
Я m also using PhoneGap Build (v3.5.x) and added the plugin via the config.xml. But what i get is an InAppBrowser without controls an cannot call the safari browser. Iпросто использую window.open (). Любой совет?
Reinos
Если он настроен правильно, window.open должно работать. В моей ситуации window.open открывает другой URL-адрес браузера, и он работает нормально. Убедитесь, что URL в порядке.
contactmatt
Я только что попробовал это с помощью Phonegap Build, и это ошибка: "plugin unsupported: org.apache.cordova.inappbrowser"
Дэвид Болл,
1

Я также столкнулся с проблемой, что ссылка не открывалась в браузере, вот мое решение с шагами:

1: Установите этот плагин Cordova.

cordova plugin add cordova-plugin-inappbrowser

2: добавьте открытую ссылку в HTML, как показано ниже.

<a href="#" onclick="window.open('https://www.google.com/', '_system', 'location=yes');" >Google</a>

3: это наиболее важный шаг, поэтому я столкнулся с множеством проблем: загрузите cordova.jsфайл и вставьте его в wwwпапку. Затем сделайте ссылку на это в index.htmlфайле.

<script src="cordova.js"></script>

Это решение будет работать как для среды Android, так и для iPhone.

Tabish
источник
-2

Как это :

<a href="#" onclick="window.open('https://www.nbatou.com', '_system'); return false;">https://www.nbatou.com</a>
OussamaChaib
источник