відкрити посилання в браузері


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

ей експерти, я використовую phonegap 2.9.0, і я використовую вищевказаний код, щоб відкрити посилання у браузері, але він відкриває його в тому ж додатку ...... як відкрити його браузер safari?

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


Якщо ви хочете відкрити _blankзовнішній браузер і _selfWebView, перегляньте моє рішення для Cordova 5.1.1: stackoverflow.com/a/32227524/82609
Sebastien Lorber

Дивіться також відповіді у подібному питанні: 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

3
так, я теж використовував ту саму ціль = "_ blank" у cordova 1.7.0, але зараз я працюю з 2.9.0, і це мене дратує, ваш sujjestion також не працює ...... :(
Ахсан Алі

6
так, я теж спробував це, і я перейшов за посиланнями, якими ви поділилися, дякую за допомогу, але проблема все-таки є, сайт все ще відкривається в додатку ...... :(
ahsan ali

Ей аасан, ви б не хотіли детальніше зупинитися на тому, що було вашим питанням? Я думаю, у мене може бути та сама проблема.
whossname

3
Пам'ятайте, що ви повинні встановити плагін InAppBrowser, щоб це працювало, інструкції тут: cordova.apache.org/docs/en/3.0.0/…
jackocnr

7
У мене така ж проблема .. рішення не працює :( відкривається просто як звичайне посилання (на android)
Даніель

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


Відмінна відповідь. На всякий випадок, якщо це не стосується інших, переконайтеся, що у вашому www / cordova_plugins.js включені пристрій і конфігурація inappbrowser. Коли я встановлюю плагіни, він додає конфігурації js & плагінів у папку інсценізації, а не в мою основну робочу папку www. Після того як я розібрав конфігурацію та місця, це спрацювало чудово.
Майкл Бордаш

1
Це найкраща відповідь! Будь ласка, пам’ятайте, що у вас немає встановлення плагіна InAppBrowser через:$ meteor add cordova:org.apache.cordova.inappbrowser@0.5.4
tixastronauta

Якщо хтось хотів би внести свій внесок у фрагмент, я завантажив його в суть. gist.github.com/redolent/e79722b32a48a536b5ba
запашний

28
<a onclick="navigator.app.loadUrl('https://google.com/', { openExternal:true });">Link</a>

Для мене працює з android & PG 3.0


Здається, мені як і раніше не вдалося в обох системах Android 2.3.7 та 4.2.2.
user569825

2
Для мене працює на Android 4.4.2 з Кордовою 3.3.0. Але не працює на iOS 6.1.
mytharcher

Для мене працює cordova 3.3.0, дякую, а звідки ви взяли цю інформацію? Не вдалося знайти в документації.
Теоман шипахі

Це працювало для мене з cordova 3.4.1 та android 4.2. Мені не потрібен плагін. Я звітую після тестування на iOS7.
pgsandstrom

Це єдине рішення, яке працювало для мене на андроїд, дякую
Niraj Chauhan

21

Є два різних способи відкрити URL-адресу в android та iphone.

Для IOS використовуйте наступний код.

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

а для android OS використовують наступний код.

navigator.app.loadUrl("http://google.com", {openExternal : true});

Кордова може використовувати window.open("http://google.com", '_system')так само добре. Не слід користуватися navigator.app.loadUrl, оскільки він не працюватиме з market://URL-адресами: у цьому випадку він просто закриє додаток і відкриється в тому ж вікні .. не завжди бажано.
Агамемнус

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" файл і знайдіть "слідStartLoadWithRequest", а потім додайте цей код до початку функції:

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.


Це єдине, що працювало для мене в 3.0.0. Дякую!!
Роклан

У 3.0 вам потрібно включити плагін InAppBrowser. Однак дивно, що може здатися.
Шон Банністер

Я б змінив його на один шар вище в MainViewController.m: - (BOOL) webView: (UIWebView *) theWebView shouldStartLoadWithRequest: (NSURLRequest *) запит navigationType: (UIWebViewNavigationType) navigationType {NSURL * url = [URL-адреса запиту]; if ([[[URL-схема] isEqualToString: @ "файл"] || [[схема URL-адреси] isEqualToString: @ "gap"]) {return [super webView: theWebView shouldStartLoadWithRequest: запит navigationType: navigationType]; } else {[[UIApplication sharedApplication] openURL: url]; повернути НІ; }}
Гамадриль

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');
    }
});

Де саме ви перекриваєте 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 call (не все проходить по посиланню)
Sebastien Lorber

3
window.open('http://www.kidzout.com', '_system');

Працює, але тільки якщо у вас встановлений плагін inappbrowser. Щоб встановити, використовуючи термінал, перейдіть до папки www у вашому проекті та введіть:

phonegap plugin add org.apache.cordova.inappbrowser

або

cordova plugin add org.apache.cordova.inappbrowser

Тоді це ваше посилання відкриється у браузері.


Команда phonegap local <command>ВИМОГА. Команду було делеговано на phonegap <command>. Команда phonegap local <command>незабаром буде видалена.
Аджай Сувалка

Я не знав раніше, але в наш час правильно встановити цей плагін cordova plugin add cordova-plugin-inappbrowser.
Плініо ФМ

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>


1

Я використовую PhoneGap Build (v3.4.0), з акцентом на iOS, і мені потрібно було вказати цей запис у своєму config.xml для PhoneGap, щоб розпізнати плагін InAppBrowser.

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

Після цього використання window.open (URL, target) має працювати як очікується, як це зафіксовано тут .


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 (). Будь-яка порада?
Рейнос

Якщо це налаштування правильно, window.open повинен просто працювати. У моїй ситуації window.open відкриває ще одну URL-адресу браузера, і вона працює добре. Переконайтеся, що URL-адреса в порядку.
contactmatt

Я щойно спробував це з програмою Phonegap Build & It помиляється з: "плагін не підтримується: 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, так і для Android та iPhone.


-2

Подобається це :

<a href="#" onclick="window.open('https://www.nbatou.com', '_system'); return false;">https://www.nbatou.com</a>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.