android - webkit 未定义:InAppBrowser Cordova
问题描述
我正在 Cordova 应用程序中从 typescript 文件运行 InAppBrowser 实例。我的 package.json 中有最新的 InAppBrowser 插件。当我在此 InAppBrowser 的 loadStop 事件上添加侦听器时。它不会执行说“未定义 webkit”的脚本。我无法找到与之相关的答案。有没有人知道如何解决这个问题?
代码片段
switchHybridApp.on("loadstop").subscribe((event: InAppBrowserEvent) => {
console.log("Here I am 3");
console.log('loadstop has been fired'); // this fires
debugger;
// when this has been executed, `webkit` variable doesn't exist inside of the `inappbrowser`
// instance
switchHybridApp.executeScript({ code: "\
var message = 'this is the message';\
var messageObj = {my_message: message};\
var stringifiedMessageObj = JSON.stringify(messageObj);\
webkit.messageHandlers.cordova_iab.postMessage(stringifiedMessageObj);"
});
}
);
我尝试过但没有成功的解决方案
(window as any).webkit....
(窗口).webkit....
解决方案
好的,一年后我在这里回答这个问题以及我是如何解决的。所以我有无限的运行间隔来使用 executeScript 检查本地和 inappbrowser 的 localStorage,但这是一个非常糟糕的选择。现在 InAppBrowser 已经实现了“postMessage”。它现在非常简单的通信。
我所做的是,我在 inAppBrowser 中打开的 Web 应用程序,我在我的 ts 文件中运行了它。
(window as any).webkit.messageHandlers.cordova_iab.postMessage(sendToNative);
请注意,objToSend 必须是 JSON 对象。传递一个简单的字符串是行不通的。
你可以创建这样的对象 -
const sendToNative= 'frontCameraOpen';
const sendToNative= {message: sendToNative};
const stringifiedMessageObj = JSON.stringify(sendToNative);
现在从本机方面,使用这个 eventlistner 像
inAppBrowser.on('message').subscribe((dataFromIAB) => {
alert(dataFromIAB.data.sendToNative);
});
感谢@DaveAlden 提供此功能,一年前我做错了,哈哈。
推荐阅读
- c# - Powershell:将对象数组(SSRS.ReportingServices.CatalogItem)传递给函数
- mysql - 使用“-interval 5 HOUR”得到带有从句的错误
- python-3.x - numpy 多处理性能
- json - 在 Oracle 11g 中解析 JSON
- javascript - 在javascript中将带引号的字符作为键和仅将字符作为对象属性的键有什么区别
- windows - 使用 artifactory 作为源时,Ansible Chocolatey 失败,找不到 404
- javascript - 置换所有字符串中的单词
- javascript - Threejs:如何使用 dat.gui.min.js 控件更改框的颜色
- django - Django:使用具有多对多关系的字段创建新用户
- arrays - 如何使用 C 将 JSON 转换为位图图像?