Значение, передаваемое через ключ code
в executeScript()
, передается в виде строки на уровень Java, который внедряет его в веб-представление Inappbrowser и eval()
.Таким образом, между веб-представлением приложения Cordova и веб-представлением InappBrowser нет прямой «связи», которая позволяла бы напрямую обмениваться сущностями Javascript.Поскольку данные передаются в виде строки, могут передаваться только строковые данные Javascript (т.е. не функции).
В приведенном выше случае значение переменной должно просто указываться в строке кода:
ref = cordova.InAppBrowser.open(env,'_blank','clearcache=no,location=no, clearsessioncache=no, footer=no,zoom=no' );
var variable_needed = 1;
ref.addEventListener("loadstop", function(e) {
ref.executeScript({
code: "console.log("+variable_needed+");"
});
});
Однако, если вы хотите отправить более сложную структуру объекта, вам необходимо ее структурировать, например:
ref = cordova.InAppBrowser.open(env,'_blank','clearcache=no,location=no, clearsessioncache=no, footer=no,zoom=no' );
var myObj = {
foo: "bar"
};
var s_myObj = JSON.stringify(myObj);
ref.addEventListener("loadstop", function(e) {
ref.executeScript({
code: "var myObj = JSON.parse('"+s_myObj+"'); console.dir(myObj);"
});
});