У меня есть приложение cordova и вы можете использовать InAppBrowser для входа на сайт. В случае успешного входа мне нужно передать ответ в приложение. Я использую executeScript() для достижения, и то же самое отлично работает в Android, тогда как в iOS обратный вызов для executeScript() не запускается.
Слушатель прослушивания My Load stop выглядит следующим образом
var ref = cordova.InAppBrowser.open("XXXX.html", "_blank", 'location=yes,toolbar=yes');
function iabLoadStop(event) {
alert("EXECUTING SCRIPT")
ref.executeScript({
code: "document.body.innerHTML"
}, function(values) {
alert("SCRIPT EXECUTED")
alert(values)
});
}
Я получаю предупреждение "EXECUTING SCRIPT" успешно при событии остановки загрузки, но executeScript(), который был оповещен предупреждением "SCRIPT EXECUTED", и innerHTML не запускается.
Как выяснилось, причина была в первом alert
. Эта функция останавливает программный поток, а также вызывает остановку кода в XXXX.html
, который выполняется executeScript
.
Поэтому следует избегать вызова таких функций (alert
/confirm
и т.д.) Между loadstop
и executeScript
, по крайней мере, на iOS. Существуют альтернативы, такие как console.log
.