Есть ли способ передать данные, скажем, переменную, определенную в inappbrowser, и передать ее значение в метод executeScript? - PullRequest
0 голосов
/ 09 мая 2019

Я хочу использовать переменную, определенную в inAppBrowser Cordova, и использовать ее в методе executeScript?

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);"})
});

Когда я пытаюсь получить доступ к исполняемому скрипту varible_in, он выдает NULL.

Я знаю, что это разные пакеты javascript. Есть ли способ добиться этого?

1 Ответ

1 голос
/ 10 мая 2019

Значение, передаваемое через ключ 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);"
    });
});
...