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() из моего внешнего сайта? Это не работает У кого-нибудь есть идеи?