Ответ 1
Просто дикая догадка, но вы не выполняете эту функцию...
{code: "var evaluationFeedback = function() {return 'Done';}; evaluationFeedback();" }
или лучше: {code: "Done"; "}
Я пишу приложение phonegap, которое запускает веб-приложение внутри inAppBrowser. Я хотел бы получить определенную обратную связь от этого веб-приложения, чтобы использовать его далее в своем приложении для телефонных разговоров.
Итак, пользователь запускает веб-приложение, делает некоторые вещи там и после нажатия кнопки, веб-приложение возвращает значение в приложение phonegap.
Я думал, что могу использовать метод executeScript для inAppBrowser для ввода функции, которая будет вызвана внутри веб-приложения с использованием какого-либо события, и когда эта функция будет вызвана, оцените ее возвращаемое значение внутри веб-приложения. Все, что я нашел, это не очень полная документация по телефонной книге и этот вопрос о stackoverflow: Добавление веб-приложения с собственными возможностями - Мошенничество с InGoogle с помощью Rails-приложений для веб-приложений PhoneGap
К сожалению, это не работает, как я ожидал, потому что функция обратного вызова срабатывает немедленно, не дожидаясь выполнения введенной функции.
Вот мой код мобильного приложения
<!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>
И это мой код веб-приложения
<!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>
Просто дикая догадка, но вы не выполняете эту функцию...
{code: "var evaluationFeedback = function() {return 'Done';}; evaluationFeedback();" }
или лучше: {code: "Done"; "}
проверьте это, это может быть что-то, что вы ищете здесь
ref.addEventListener('loadstart', function(event){
//alert('start: ' + event.url);
});
ref.addEventListener('loadstop', function(event){
//alert('stop: ' + event.url);
});
ref.addEventListener('loaderror', function(event){
//alert('error: ' + event.message);
});
ref.addEventListener('exit', function(event){
});
Используйте выше для событий для возврата возвращаемого значения в приложении
В строковом значении code
определите функцию и вызовите ее. Возвращаемое значение вернется в аргументе обратного вызова (или в ngCordova в качестве аргумента разрешенного обещания). Спасибо @Jonathan Adami за предложение.