android - 有什么方法可以传输数据说在 inappbrowser 中定义的变量并在 executeScript 方法中传递它的值?
问题描述
我想使用在cordova的inAppBrowser中定义的变量并在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 executescript 时,它给出了 NULL。
我知道它们是不同的 javascript 包。有什么办法可以做到这一点?
解决方案
通过code
keyexecuteScript()
传递的值作为字符串传递给 Java 层,Java 层将其注入到 Inappbrowser 的 Webview 中eval()
。因此,Cordova 应用程序 Webview 和 InappBrowser Webview 之间没有直接的“连接”,允许直接共享 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);"
});
});
推荐阅读
- ansible - 如何防止 Ansible 合并主机变量?
- ruby-on-rails - 已解决 - 带有 Nginx https 配置的 Rails Web 应用程序显示 403 被禁止
- python - Python 程序仅适用于单个数字
- mariadb - MariaDB 空间查询以确定重叠比例
- python-3.x - 如何查找和设置目录?
- r - 如何在 R 图中的对数轴上拟合线性回归线?
- angular - 为什么我在上下文菜单中看不到“新建...角度组件”?
- django - Channel Worker 崩溃:崩溃前如何做一些任务?
- jquery - 如何将数据从我的网站发送到我的 Arduino netshield
- python - Zlib 库图像压缩无法正常工作