Phonegap Build CLI-5.2.0 Загрузка и закрытие изнутри веб-приложения

Я боролся с вызовами на открытое окно, используя inappbrowser из моего приложения. В основном, я использую phonegap в качестве обертки для загрузки мобильного сайта CMS со специальными функциями приложения.

Вот index.html. Я использую inappbrowser (с местоположением установлено no).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Emerald Test App</title> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="viewport" content="width=device-width" /> <script src="phonegap.js"></script> <script type='text/javascript'> var ref = null; function onLoad() { document.addEventListener("deviceready", onDeviceReady, false); } function onDeviceReady() { var url = 'https://my-cms-site.com/content.aspx?page_id=31&org_id=1&app=1'; var target = '_blank'; var options = "location=no" ref = cordova.InAppBrowser.open(url, target, options); } </script> </head> <body onload="onLoad()"> </body> </html> 

То, что я ищу, – это открытые ссылки в системном браузере – с моего внешнего сайта, загруженного через inappbrowser

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

 <script type="text/javascript"> window.open(url, '_system'); </script> 

И _blank, и добавление «location = no» и т. Д., Но не кости. Это внешние страницы, загруженные с моего удаленного сайта.

Когда эти ссылки нажимаются, они открываются в том же браузере (inappbrowser или webview) и захватывают браузер. Я хочу открыть их в другом системном браузере (хром, сафари, что угодно). Это позаботится о моей проблеме с загрузкой (поскольку файлы, мы надеемся, откроются в системном браузере, и пользователь сможет выяснить, что с ними делать).

Я попытался добавить прослушиватель событий и executescript, чтобы вернуть значение href. Затем используйте это значение для window.open (href, '_ system'); Из index.html (вместо удаленной страницы). Потому что по индексу у меня все равно будет ссылка на inappbrowser.

  ref.addEventListener( "loadstop", function() { ref.executeScript( { code: "var gbal = null; $('a').on('click', function() { gbal = $(this).attr('href'); }); (function runIt() { return gbal })();" }, function( values ) { if (values != null) { //alert( values[ 0 ] ); window.open(values[0],'_system'); } } ); }); } 

Значения [0] всегда равны нулю. Который, кажется, указывает, что я не делаю что-то правильно в коде: часть executescript – или $ (это) на самом деле не такая

Итак, большой вопрос – как я могу открывать ссылки на моем внешнем сайте в системном браузере. Window.open ('whatever.htm', '_XXXXX') не имеет значения, когда вызывается на моем удаленном сайте. Я на правильном пути, используя прослушиватель событий?

Solutions Collecting From Web of "Phonegap Build CLI-5.2.0 Загрузка и закрытие изнутри веб-приложения"

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

Итак, вы хотите открыть ссылку на внешний браузер на удаленном загруженном сайте InAppBrowser?

На удаленном сайте вам нужно будет включить скрипт src в файл cordova.js, файл cordova_plugins.js и включить вашу папку плагинов. Эти файлы должны размещаться на вашем удаленном сайте. Я предпочитаю загружать шахту условно, если знаю, что это «приложение». Файлы кордовы при загрузке будут вызывать серию предупреждений, поэтому вы не захотите их загрузить, если не знаете, что это приложение.

Введите описание изображения здесь

Где вы получаете эти файлы? Я установил Phonegap Desktop и использовал файлы из сборки, но имел некоторые ссылочные ошибки. Вместо этого я использовал функцию Phonegap Build и извлек файлы из APK. Переименовал appname.apk в appname.apk.zip и извлек / скопировал необходимые файлы js на мой сервер. * Есть некоторые проблемы с различиями в платформе, и файл cordova.js необходимо будет изменить и условно загрузить для iOS / Android.

Это необходимо, так что у вас есть ручки для inappbrowser (и в случае моего требования «закрыть приложение» – навигатор ).

На моем удаленном (внешнем) сайте (после загрузки кордоны / плагинов) я могу закрыть приложение с помощью простого вызова navigator.app.exitApp ();

На страницах моего удаленного (внешнего) сайта, загруженного в inappbrowser, теперь я могу открывать ссылки на внешних страницах, делая что-то вроде этого:

 <a onclick="loadUrl('http://google.com'); return false;" href="#">Test link, don't click</a> <script type="text/javascript"> $('.closeapp').click(function() { navigator.app.exitApp(); //this only works on Android. iOS doesn't allow for programmatic exit }); function loadUrl(url){ navigator.app.loadUrl(url, { openExternal:true }); return false; } </script> 

Я планирую немного модифицировать функцию loadURL, используя jquery, чтобы обрабатывать клик и искать класс. Что-то вроде:

 $('.downloadable').click(function() { var url = $(this).attr('href'); navigator.app.loadUrl(url, { openExternal:true }); }); 

Вышеупомянутое работает только для Android. Попытка использования vanilla window.open (' http://www.whatever.com ', '_system') не открывает внешний браузер в iOS с моего внешнего сайта. Я думал об использовании другого ref = cordova.inappbrowser.open () из моего внешнего сайта? Это не работает. У кого-нибудь есть идеи?