2016-09-26 4 views
0

Я разрабатываю гибридное приложение в телефонной запинке, и в основном у меня есть кнопка на индексной странице, которая при каждом нажатии открывает внешний url. Я преуспел на Android и провалился на iOS.cordova inappbrowser не может открыть внешний url на iOS

Я посмотрел на эти вопросы iOS/Cordova: InAppBrowser not working - cordova/phonegap onclick doesn't work - PhoneGap Build: how to open external url in device browser on Android? - phonegap open link in browser, но, к сожалению, ни один из этих вопросов не помог мне решить эту проблему.


Первая гипотеза может быть сообщение об ошибке предупреждение: Сообщение об ошибке на iPhone, где я тестирую мое приложение является: [ERROR] Error initializing Cordova: Missing Command Error.

Вторая гипотеза Я делаю что-то не так с событием onclickwindow.open , потому что, когда я нажимаю кнопку открытия на тестовом устройстве iOS, ничего не происходит.

Вот код:

document.getElementById("openBrowser").addEventListener("click", function(){ 
 
     var ref = window.open('http://www.espn.com', '_self', 'location=yes'); 
 
     ref.addEventListener('loadstart', function(event) { alert('start: ' + event.url); }); 
 
     ref.addEventListener('loadstop', function(event) { alert('stop: ' + event.url); }); 
 
     ref.addEventListener('loaderror', function(event) { alert('error: ' + event.message); }); 
 
     ref.addEventListener('exit', function(event) { alert(event.type); }); 
 
    });
<button id="openBrowser">APRI</button>


Как вы можете видеть выше фрагмент кода работает и работает на пульсация эмулятора Google тоже, и как я уже говорил ранее, на начало моего вопроса оно работает также и на Android (ссылка на приложение для Android android https://play.google.com/store/apps/details?id=com.phonegap.unoxtutti&hl=it) На самом деле я не уверен, какая проблема может быть за этим сбоем либо от прежнего, либо от t последняя гипотеза.

Кроме Cordova плагин inappbrowser в config.xml

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

Я действительно не в состоянии найти ошибку, но я надеюсь, что предоставили вам необходимую информацию, чтобы помочь мне исправить эту кажущуюся трудноразрешимую проблему

Испытательные среды: Google Ripple Emulator, Phonegap Desktop App и Phonegap Mobile App. Приложение для рабочего стола создает каталог проекта, в то время как мобильное приложение и эмулятор google ripple подключены к настольному приложению и являются моей тестовой средой. Наконец, но не в последнюю очередь на эмуляторе ряби, внешний url успешно открывается, пока он не находится в мобильном приложении, а при нажатии открывается окно initialization error.

+1

У вас есть белый список вашего url? См. [Кордова Документы] (https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/). – Beat

+0

@Beat У меня есть белый список намерений, который применяется для метода window.open, это достаточно или мне нужен белый список точного url, который я пытаюсь открыть? – Riccardo

+1

@Beat это белый список навигации, что вы имеете в виду? Riccardo

ответ

1

После очень долгого времени, проведенного в Интернете, я сделал InAppBrowser открытым внешний URL. this is the SO answer who solved my bug

и это код ответа в ссылке

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 
 
    } 
 
}
<a href="http://stackoverflow.com">

В основном все, что я делаю в приведенном выше фрагменте кода, чтобы проверить, является ли устройство IOS или Android и в зависимости от используемого устройства, я использую другой метод. Это работает на iOS Android и в браузере. Я действительно надеюсь, что этот ответ поможет как можно большему количеству людей.

Plugin устройств и InAppBrowser Plugin требуется еще этот код не

-1

@Riccardo Пройдите через документацию по телефонному разговору, чтобы добавить фрагмент кода в onDeviceReady и попробовать его. InAppBrowser

+1

Я уже тестировал приложение на устройстве iOS и в онлайн-эмуляторе пульсаций, поэтому позвольте мне сказать вам, что мне удалось добиться успеха на эмуляторе и сбой на тестовом устройстве на Android все работает отлично, поэтому я уверен, что проблема связана с первой гипотезой моего вопроса, и внимательно прочитайте мой вопрос. Более того, я уже пробовал то, что вы предложили, и у меня все еще есть эта ошибка iOS – Riccardo

0

После тратить время на веб-прибегая к помощи, я констатировала InAppBrowser открыть внешний URL-адрес. В основном, есть ошибка в плагине InAppBrowser для платформы ios. когда вы нажимаете на ссылку, на iPhone появляется сообщение Alert. Я исправил ошибку, используя более старую версию плагина InAppbrowser. теперь он работает отлично.

Смежные вопросы