访问相机objc的iOS Web视图应用程序

时间:2018-04-25 09:08:00

标签: html ios objective-c

之前我曾在Android上问过一个类似的问题,现在在iOS中使用相同的方法。我使用UIwebview构建了一个iOS应用程序。我如何允许网页视图访问相机,这是我的代码

#import "ViewController.h"
#define YourURL @"https://XXXXXXXXXXX"
@interface ViewController ()<UIWebViewDelegate>
@property (nonatomic,strong)UIWebView *webView;
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    self.webView.scrollView.frame =self.webView.frame;
    _webView.backgroundColor = [UIColor grayColor];
    _webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20)];
    _webView.delegate = self;

    if ([[[[NSUserDefaults standardUserDefaults]dictionaryRepresentation]allKeys]containsObject:@"cookie"]) {

        NSArray *cookies =[[NSUserDefaults standardUserDefaults]  objectForKey:@"cookie"];
        NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
        [cookieProperties setObject:[cookies objectAtIndex:0] forKey:NSHTTPCookieName];
        [cookieProperties setObject:[cookies objectAtIndex:1] forKey:NSHTTPCookieValue];
        [cookieProperties setObject:[cookies objectAtIndex:3] forKey:NSHTTPCookieDomain];
        [cookieProperties setObject:[cookies objectAtIndex:4] forKey:NSHTTPCookiePath];
        NSHTTPCookie *cookieuser = [NSHTTPCookie cookieWithProperties:cookieProperties];
        [[NSHTTPCookieStorage sharedHTTPCookieStorage]  setCookie:cookieuser];
    }

    NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",YourURL]]];
    _webView.scalesPageToFit = YES;
    [ self.webView loadRequest:req];
    [self.view addSubview:self.webView];
}
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:YES];
}
- (void)webViewDidStartLoad:(UIWebView *)webView{
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{


    NSArray *nCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
    NSHTTPCookie *cookie;
    for (id c in nCookies)
    {
        if ([c isKindOfClass:[NSHTTPCookie class]])
        {
            cookie=(NSHTTPCookie *)c;
            if ([cookie.name isEqualToString:@"PHPSESSID"]) {
                NSNumber *sessionOnly = [NSNumber numberWithBool:cookie.sessionOnly];
                NSNumber *isSecure = [NSNumber numberWithBool:cookie.isSecure];
                NSArray *cookies = [NSArray arrayWithObjects:cookie.name, cookie.value, sessionOnly, cookie.domain, cookie.path, isSecure, nil];
                [[NSUserDefaults standardUserDefaults] setObject:cookies forKey:@"cookie"];
                break;
            }
        }
    }
}
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
    NSLog(@"--------------%@",error);

}
@end

我试过这个,但没有成功给我一个错误access camera from uiwebview?

html编码

<!DOCTYPE html>
<html>
    <head>
        <title>///////</title>
        <script type="text/javascript" src="../includes/instascan.min.js"></script>
    </head>
    <body>
        <video id="preview" <?php /* style="position:fixed;right:0;bottom:0;min-width:100%;min-height:100%;" */ ?>></video>
        <script type="text/javascript">
            let opts = {
                // Whether to scan continuously for QR codes. If false, use scanner.scan() to manually scan.
                // If true, the scanner emits the "scan" event when a QR code is scanned. Default true.
                continuous: true,
                // The HTML element to use for the camera's video preview. Must be a <video> element.
                // When the camera is active, this element will have the "active" CSS class, otherwise,
                // it will have the "inactive" class. By default, an invisible element will be created to
                // host the video.
                video: document.getElementById('preview'),
                // Whether to horizontally mirror the video preview. This is helpful when trying to
                // scan a QR code with a user-facing camera. Default true.
                mirror: false,
                // Whether to include the scanned image data as part of the scan result. See the "scan" event
                // for image format details. Default false.
                captureImage: false,
                // Only applies to continuous mode. Whether to actively scan when the tab is not active.
                // When false, this reduces CPU usage when the tab is not active. Default true.
                backgroundScan: true,
                // Only applies to continuous mode. The period, in milliseconds, before the same QR code
                // will be recognized in succession. Default 5000 (5 seconds).
                refractoryPeriod: 5000,
                // Only applies to continuous mode. The period, in rendered frames, between scans. A lower scan period
                // increases CPU usage but makes scan response faster. Default 1 (i.e. analyze every frame).
                scanPeriod: 1
            };
            let scanner = new Instascan.Scanner(opts);
      scanner.addListener('scan', function (content) {
        window.location = "result.php?result="+content;
      });
      Instascan.Camera.getCameras().then(function (cameras) {
        if (cameras.length > 0) {
          if(cameras.length > 1){
            scanner.start(cameras[1]);
          }
          else{
            scanner.start(cameras[0]);
          }
        } else {
          console.error('No cameras found.');
        }
      }).catch(function (e) {
        console.error(e);
      });
        </script>
    </body>
</html>

提前谢谢

0 个答案:

没有答案