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') не имеет значения, когда вызывается на моем удаленном сайте. Я нахожусь на правильном пути, используя прослушиватель событий?
Ответы
Ответ 1
Отвечая на мой собственный вопрос, так что любой, кто сталкивается с подобной ситуацией, может получить солидный ответ. Я собрал это вместе с другими сообщениями, ссылками и документацией.
Итак, вы хотите открыть ссылку на внешний браузер на удаленном загруженном сайте в InAppBrowser?
На удаленном сайте вам нужно будет включить script 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() из моего внешнего сайта? Это не работает. У кого-нибудь есть идеи?