Ich schreibe eine Phonegap-App, die eine Web-App in einem InAppBrowser startet. Ich möchte bestimmte Rückmeldungen von dieser Web-App erhalten, um sie in meiner phonegap-App weiter zu verwenden.Code in InApp-Browser injizieren und den Rückgabewert in der App erhalten
So der Benutzer startet die Web-App, tut einige Dinge dort und nach einem Klick auf eine Schaltfläche, gibt die Web-App einen Wert an die Phonegap-App zurück.
Ich dachte, ich könnte die executeScript-Methode des inAppBrowser verwenden, um eine Funktion zu injizieren, die innerhalb der Web-App mit einem Ereignis aufgerufen wird, und wenn diese Funktion aufgerufen wird, ihren Rückgabewert in der Web-App auswerten. Alle ich fand, war das nicht sehr vollständige Dokumentation phonegap und diese Frage auf Stackoverflow: Augmenting a webapp with native capabilities - Bridging PhoneGap's InAppBrowser with Rails web app application javascript
Leider funktioniert es nicht, wie ich erwartet hatte, weil die Callback-Funktion Brände imediately, ohne für die injizierten Funktion wartet auszuführen.
Hier ist mein mobiler app Code
<!DOCTYPE html>
<html>
<head>
<title>InAppBrowser.executeScript Example</title>
<script type="text/javascript" charset="utf-8" src="cordova-2.7.0.js"></script>
<script type="text/javascript" charset="utf-8">
// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// Global InAppBrowser reference
var iabRef = null;
// Inject our custom JavaScript into the InAppBrowser window
//
function addFeebackFunction() {
iabRef.executeScript(
{code: "var evaluateFeedback = function(){return 'Done';};"},
function(data) {
alert(data);
}
);
//iabRef.close();
}
function iabClose(event) {
iabRef.removeEventListener('loadstop', addFeebackFunction);
iabRef.removeEventListener('exit', iabClose);
}
// Cordova is ready
//
function onDeviceReady() {
iabRef = window.open('http://{ipaddress}/test/', '_blank', 'location=no');
iabRef.addEventListener('loadstop', addFeebackFunction);
iabRef.addEventListener('exit', iabClose);
}
</script>
</head>
<body>
<h1>Mobile App</h1>
</body>
</html>
Und sie ist mein Web-App-Code
<!DOCTYPE HTML>
<html>
<head>
<title>
Test
</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<script type="text/javascript" src="./js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#get-feedback').click(function() {
var feedback = $('#feedback').val();
evaluateFeedback(feedback);
});
});
</script>
</head>
<body>
<div data-role="page">
<article data-role="content">
<h1>Web app</h1>
<input type="text" id="feedback" /><br />
<button type="button" id="get-feedback">Feedback</button>
</article>
</div>
</body>
</html>
Ich konnte auch iabRef.executeScript nicht erhalten, um einen Wert zurückzugeben. Ich komme nie in die Callback-Funktion. Dies funktioniert gut in iOS, aber nicht auf Android. Ich war in der Lage, durch den Debug-Code in Android zu gehen und es sah in Ordnung. Konnten Sie das zur Arbeit bringen? – TWilly
Ich gab Cordova komplett auf und entschied mich, meine eigene Schnittstelle zwischen den Webviews und der App zu schreiben. – Oliver
Das Upgrade auf phonegap 3.1 hat das Problem für mich gelöst. Ich zielte auf android kitkat, und das brachte Dinge in phonegap 3.0 kaputt. – TWilly