Cómo conseguir el trabajo de llamar a los métodos de Flash incorporado objeto que se coloca en el interior de Dart de polímero elemento

StackOverflow https://stackoverflow.com//questions/21023393

Pregunta

Estoy implementando una aplicación con capacidad de tomar una foto con la webcam.Como una reserva para IE, yo uso flash objeto de que la manija de la webcam de la interacción.Todo funciona bien hasta que el uso de este objeto flash en el interior de Dart de polímero elemento.Parece que algo va mal después de que el código traducido de Dart a Javascript.

Aquí está el ejemplo de trabajo utilizando html & js http://flash-camera-test.herokuapp.com/
Como usted puede ver, usted es capaz de capturar webcam arroyo y tomar una foto.

Aquí no es ejemplo de trabajo de dart aplicación que utiliza el mismo código para el manejo de la webcam http://flash-invoke-test.herokuapp.com/
Permite insertar dinámicamente polímero elemento con el objeto Flash en el interior.Pero cuando usted haga clic en "Capturar" lanza

Object doesn't support this property or method 'CallFunction'

function __flash__addCallback(instance, name) {
  instance[name] = function () { 
    return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));
  }
}

Donde el instance parámetro es mi <object> con Flash en el interior, y la name parámetro es igual a "capture"

Objeto Flash de código fuente https://github.com/addyosmani/getUserMedia.js/blob/master/dist/fallback/src/jscam.as

Html

<object id="XwebcamXobjectX" name="XwebcamXobjectX" type="application/x-shockwave-flash" data="assets/fallback/jscam_canvas_only.swf" width="352px" height="264px">
  <param name="movie" value="assets/fallback/jscam_canvas_only.swf" />
  <param name="FlashVars" value="mode=callback&amp;quality=100" />
  <param name="allowScriptAccess" value="always" />
</object>

<canvas id="canvas" width="320" height="240"></canvas>
<a onclick="window.webcam.capture()">Capture</a>

Javascript

<script>
  window.webcam = {
    width: 320, 
    height: 240, 
    mode: "callback",
    capture: function (x) {
      var cam = document.getElementById('XwebcamXobjectX');
      cam.capture(x);
    },
    save: function (x) {
      var cam = document.getElementById('XwebcamXobjectX');
      cam.save(x);
    },
    onImageSaved: function (img) {},
    debug: function () {},
    onCapture: function () {
      var canvas = document.getElementById('canvas');
      this.image = canvas.getContext("2d").getImageData(0, 0, this.width, this.height);
      this.pos = 0;
      this.save();
    },
    onTick: function () {},
    onSave: function (data) {
      var col = data.split(";"),
      img = this.image,
      tmp = null,
      w = this.width,
      h = this.height;

      for (var i = 0; i < w; i++) { 
        tmp = parseInt(col[i], 10);
        img.data[this.pos + 0] = (tmp >> 16) & 0xff;
        img.data[this.pos + 1] = (tmp >> 8) & 0xff;
        img.data[this.pos + 2] = tmp & 0xff;
        img.data[this.pos + 3] = 0xff;
        this.pos += 4;
      }

      if (this.pos >= 4 * w * h) { 
        this.onImageSaved(img);
      }

    },
    onLoad: function () {}
  };

  window.webcam.onImageSaved = function (img) {
    var canvas = document.getElementById("canvas");
    ctx = canvas.getContext("2d");
    ctx.putImageData(img, 0, 0);
  };
</script>

Código de Dart de la aplicación aquí https://github.com/petalvlad/dart-flash-invoke-test

¿Fue útil?

Solución 2

He resuelto mi problema con SWFObject biblioteca.También se requiere llamar a método deseado en impl propiedad:

var cam = document.getElementById('XwebcamXobjectX');
cam.impl.capture();

Otros consejos

Esta línea no está funcionando

var cam = document.getElementById('XwebcamXobjectX');

Esto no encontrar un elemento en el interior de la shadowDOM (dentro de un Polímero elemento).

Yo no soy un JS desarrollador pero algo como esto podría funcionar

var cam = document.querySelector('container-polymer').shadowRoot.querySelector('#canvas');
var cam = document.querySelector('container-polymer').webkitShadowRoot.querySelector('#canvas');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top