只有当应用移动到后台

时间:2016-05-04 14:34:56

标签: javascript objective-c camera cordova-plugins window.location

我正在尝试为iPad应用程序添加cordova相机插件,但在使用navigator.camera调用相机后,只有在应用程序进入后台(点击主页按钮)后才会在屏幕上显示。但是,只有在我正在侦听webView:shouldStartLoadWithRequest事件时才会发生这种情况,我将其用作javascript-Objective C桥。

使用的版本:

  • Cordova:5.4.1
  • iOS平台/平台特定cordova.js:4.1.1
  • Xcode:7.2

设置项目的步骤:

  • cordova创建pluginTest com.pluginTest pluginTest
  • cd pluginTest
  • cordova platform add ios
  • cordova插件添加cordoba-plugin-camera

为了测试相机,我编辑了index.js文件,该文件由cordova生成,因此onDeviceReady函数如下所示:

onDeviceReady: function() {
    app.receivedEvent('deviceready');
    alert(navigator.camera);
    navigator.camera.getPicture(function(imageData) {
        alert('success');
    },
    function(message) {
        alert('fail');
    });
}

这似乎工作正常,警报后相机会弹出。

但是在MainViewController.m中,如果我正在监听webView:shouldStartLoadWithRequest事件,如:

-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest: (NSURLRequest *)request navigationType: (UIWebViewNavigationType)navigationType {

    NSString* req = [[request URL] absoluteString];
    NSLog(req);

    return YES;
}

然后,一旦应用程序加载,第一个位置更改是index.html,之后 - 执行navigator.camera.getPicture后 - 有无数个位置更改命中上述方法,并且url始终为& #39;空位://就绪&#39 ;.点击主页按钮后,请求流程停止,摄像机显示。任何想法为什么会发生这种情况?

另外,我必须让我的MainViewController符合UIWebViewDelegate协议,以便它实际监听shouldStartLoadWithRequest事件,以防我使用4.1.1 cordova.js。在这种情况下,仅仅符合UIWebViewDelegate协议就足以解决问题。奇怪的是,如果我使用较旧的cordova平台 - 3.9.2专门 - 那么似乎CDVViewController已经在监听shouldStartLoadWithRequest事件。在任何一种情况下,相机在应用程序暂停后显示。

Xcode中的控制台跟踪显示:

2016-05-04 19:02:51.015 plugTest2[3949:2271226] file:///var/mobile/Containers/Bundle/Application/FE21DCB1-7ADE-4754-80F1- 7055F8E1F450/plugTest2.app/www/index.html
2016-05-04 19:02:51.020 plugTest2[3949:2271226] Resetting plugins due to page load.
2016-05-04 19:02:51.759 plugTest2[3949:2271226] Finished load of: file:///var/mobile/Containers/Bundle/Application/FE21DCB1-7ADE-4754-80F1-7055F8E1F450/plugTest2.app/www/index.html
2016-05-04 19:02:57.149 plugTest2[3949:2271226] gap://ready

接下来大约有一百个差距://准备好'在接下来的4秒内网址......

2016-05-04 19:03:01.738 plugTest2[3949:2271226] gap://ready
2016-05-04 19:03:02.112 plugTest2[3949:2271226] Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

1 个答案:

答案 0 :(得分:1)

我知道我迟到了,但今天我有一个艰难的一天试图解决这个问题,我可以解决这个问题,将以下内容添加到我的内容安全策略标记中:

default-src * blob: 'self' gap:

我把你放在了上下文中。这是我的网络应用程序的index.html中的元标记。

<meta http-equiv="Content-Security-Policy" content="default-src * blob: 'self' gap:; script-src 'self' 'unsafe-inline' (…)/ >

我在this文章中找到了有关该问题的信息。正如它所解释的那样:

  

“gap:// ready file:// *:是允许加载远程数据所必需的   iOS 10应用中的内容“

我希望这对其他人有帮助。