流星科尔多瓦:无法使相机插件工作,未捕获TypeError:无法读取属性' getPicture'未定义的

时间:2014-10-19 19:31:18

标签: cordova meteor camera

我正在试用Meteor Cordova相机插件,它不会工作,我不知道我错过了什么。

这是我做的:

  1. Meteor创建新项目

  2. 添加了cordova相机包meteor add cordova:org.apache.cordova.camera@0.3.1

  3. 对屏幕上的默认按钮进行编程以拍摄照片,然后将其附加到正文中 这应该使用内置于笔记本电脑中的相机,但是当我点击按钮时我得到的只有:Uncaught TypeError: Cannot read property 'getPicture' of undefined

    当我使用命令meteor run ios在iPhone模拟器中运行应用程序并单击按钮时出现弹出错误:Failed because: no camera available

  4. 这是我的html和js文件的样子:

    main.html中

    <head>
      <title>cameraTest</title>
    </head>
    
    <body>
      <h1>Welcome to Meteor!</h1>
    
      {{> hello}}
    </body>
    
    <template name="hello">
      <button>Click Me</button>
      <p>You've pressed the button {{counter}} times.</p>
    </template>
    

    main.js

    if (Meteor.isClient) {
      // counter starts at 0
    
      function onSuccess(imageData) {
          var image = document.getElementById('myImage');
          image.src = "data:image/jpeg;base64," + imageData;
          $('body').append(image);
      }
    
      function onFail(message) {
          alert('Failed because: ' + message);
      }
    
      Session.setDefault("counter", 0);
    
      Template.hello.helpers({
        counter: function () {
          return Session.get("counter");
        }
      });
    
      Template.hello.events({
        'click button': function () {
    
          navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
            destinationType: Camera.DestinationType.DATA_URL
          });
        }
      });
    }
    

1 个答案:

答案 0 :(得分:1)

这是因为如documentation所述,必须将cordova代码包含在闭包中。您必须在events函数中执行此操作。见底部。

PS:您无法在iOS模拟器上测试相机,而是使用真正的iPhone。

Meteor.startup(function () {
    // The correct way
    navigator.geolocation.getCurrentPosition(success));
});

// Will not work
navigator.geolocation.getCurrentPosition(success));

您的代码将变为:

Template.hello.events({
  'click button': function () {
    Meteor.startup(function() {
      navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
        destinationType: Camera.DestinationType.DATA_URL
      });
    });
  }
});