2016-09-14 2 views
10

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

Адрес 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) и захватывают браузер. Я хочу открыть их в другом системном браузере (хром, сафари, что угодно). Это позаботится о моей проблеме с загрузкой (поскольку файлы, мы надеемся, откроются в системном браузере, и пользователь сможет выяснить, что с ними делать).

Я попытался добавить прослушиватель событий и выполнить execcript, чтобы вернуть значение 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') не имеет значения, когда вызывается на моем удаленном сайте. Я на правильном пути, используя прослушиватель событий?

ответ

2

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

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

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

enter image description here

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

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

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