我有一个cordova应用程序,其中安装了cordova-gmv-barcode-scanner插件。在Android上,一切正常,但是在IOS上运行时出现奇怪的错误。
我期望什么?
用户单击按钮后,我调用GMVBarcodeScanner.scan(..),并希望弹出摄像头窗口
发生了什么事?
用户单击按钮后,我调用MVBarcodeScanner.scan(..),但没有任何反应。但是,当我从顶部菜单向下滑动一点(只需与电池指示器所在的顶部菜单进行交互)时,相机窗口就会弹出,一切都会按预期进行。
我尝试了什么?
我已经在装有iphone 11,iphone 8,ipad 7的模拟器以及真实设备(iphone 7)上进行了测试。行为与所有模拟或真实设备完全相同。
我尝试过玩deviceready事件。但是没有任何帮助。单击后立即触发了预期的事件,但是只有当我与顶部菜单进行交互时,摄像机才会出现。
从事件处理程序调用函数后,我曾尝试运行摘要循环(我使用angularjs),但没有效果
我的JS
$this.scanQrCode = function () {
document.addEventListener("deviceready", function () {
$window.plugins.GMVBarcodeScanner.scan({}, function (err, result) {
if (err) {
setRouteId(null);
AppService.showAlert('No valid QR code.');
return;
}
AppService.showMessage('Route was scanned.');
var routeId = result.split(',')[0];
var fqdn = result.split(',')[1];
setRouteId(routeId, fqdn);
});
});
};
任何帮助将不胜感激。我的想法不多了。
答案 0 :(得分:0)
我设法通过在CSP META标记中允许gap:// ready来解决我的问题。科尔多瓦(Cordova)尝试戳戳本机api,但由于安全策略总是被其阻止而无法这样做。
我改变了
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />
到
<meta http-equiv="Content-Security-Policy" content="default-src 'self' gap://ready file://* *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />