Input 如何添加modernizr build以便正确检查modernizr.capture?(当前始终未定义)

Input 如何添加modernizr build以便正确检查modernizr.capture?(当前始终未定义),input,camera,modernizr,Input,Camera,Modernizr,我需要检查用户的设备是否可以从我网站上的摄像头输入。为了做到这一点,我正在尝试使用Modernizer。我遵循了他们网站上提供的步骤/示例代码,但当我测试capture属性时,无论我是否在支持capture的设备上,我总是未定义 我采取了以下步骤: 然而,在所有这些之后,当在chrome inspector中检查Modernizer.capture 我的基本检查功能如下: $scope.hasCamera = function() { if (Modernizr.c

我需要检查用户的设备是否可以从我网站上的摄像头输入。为了做到这一点,我正在尝试使用Modernizer。我遵循了他们网站上提供的步骤/示例代码,但当我测试
capture
属性时,无论我是否在支持
capture
的设备上,我总是未定义

我采取了以下步骤:

  • 然而,在所有这些之后,当在chrome inspector中检查
    Modernizer.capture

    我的基本检查功能如下:

        $scope.hasCamera = function() {
            if (Modernizr.capture) {
                // supported
                return true;
            } else {
                // not-supported
                return false;
            }
        }
    
    这是我第一次使用Modernizer。我是否遗漏了一步或做了一些不正确的事情?我还使用npm安装安装了modernizr,并尝试从命令行向json配置文件添加引用

    或者,我如何检查我的设备是否有摄像头

    非常感谢您抽出时间。如果我不清楚或者您需要我提供更多信息,请告诉我。

    一些事情

  • 虽然照片很有帮助,但在公共网站(您自己的项目或jsbin.com之类的网站)上托管的实际代码是有用的10倍。因此,我不知道为什么它会以未定义的形式出现
  • 实际捕获检测。这一切都归结于此
  • var capture='capture'位于document.createElement('input')中`

  • 您的代码比需要的复杂得多。让我们把它分解一下。您试图将
    $scope.hasCamera
    设置为等于
    modernizer.capture
    的结果,并使用函数检查
    modernizer.capture
    的值,如果为真,则返回
    true
    。如果为false,则返回
    false
    。有相当多的重复逻辑,所以我们可以从内到外分解它
  • 首先,测试真/假值,然后返回相同的值。这意味着您只需返回
    modernizer.capture

    $scope.hasCamera = function() {
      return Modernizr.capture
    }
    
    虽然Modernizr始终会给您一个布尔值(当它运行时-没有看到您的实际代码,我无法说明为什么它会返回为未定义),但如果您不确定可以添加的值
    undefined
    变成
    false

    $scope.hasCamera = function() {
      return !!Modernizr.capture
    }
    
    此时,您可以看到,我们正在设置一个函数来返回一个静态值。这意味着我们可以直接将静态值赋值给变量,而不是设置一个函数

    $scope.hasCamera = !!Modernizr.capture
    
    现在,您可以做得更好的最后一件事是,如果您仅将Modernizer用于这一功能。因为这是一个如此简单的特征检测,所以使用所有的Modernizer是过分的

    $scope.hascamer='capture'在document.createElement('input')中`