PhoneGap Build CLI-5.2.0 Скачать и закрыть изнутри веб-приложения

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

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

<!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' и т. Д., Но без игры в кости. Это внешние страницы, загруженные с моего удаленного сайта.

При щелчке по этим ссылкам они открываются в том же браузере (в приложении или в веб-браузере) и переходят в браузер. Я хочу открыть их в другом системном браузере (Chrome, Safari и т. Д.). Это позаботится о моей проблеме с загрузкой (поскольку, надеюсь, файлы откроются в системном браузере, и пользователь сможет выяснить, что с ними делать).

Я попытался добавить прослушиватель событий и executetescript, чтобы вернуть значение 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] всегда равны нулю. Что, по-видимому, указывает на то, что я неправильно что-то делаю в коде: часть executetescript или $(this) на самом деле не это

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

1 ответ

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

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

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

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

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

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

На моем удаленном (внешнем) сайте (после того, как я загрузил cordova/plugins) теперь я могу закрыть приложение простым вызовом 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() из моего внешнего сайта? Это не работает У кого-нибудь есть идеи?

Другие вопросы по тегам