Problem
Here, at Flockin we needed a way to login from Browser using a QR-code card and the Webcam.
For the time being (ealy 2012), Javascript have no API to stream/parse from webcam, also the main free library for QR code, Google’s ZXing (actually the only one working I know of) does not support Javascript.
Solution
The most viable solution detected was to parse Webcam from ZXing’s ActionScript module, in a very dry package that could interact with JavaScript through ExternalInterface with Javascript registering a callback.
Use
The use is pretty simple. When the swf object gets completely loaded on the page just register the JS callback which is a function that takes 1 param (String or null), the Interval of call (default 500), and an error callback (default null)
You can download all files from github, that is the project home. *Recommend you adapt the .as3 and recompile to fit your specific needs
CODE
The example below is the same found at the project’s example/index.html
// sample of function that may be registered as Callback. function actQR( msg ){ // msg comes null if no code were detected if( msg === null ){ //expect a lot of nulls console.log("no QR were read at this time") } else { // a valid QR reading, do something with it console.log(msg) // ask flash to stop parsing, this saves processing as webcam reading stop QR.stop() } } // sampe of function to be called when something goes wrong function noWebcam( msg ){ alert("Err! "+msg) } // this setInterval is a safe measure, so we don't call flash function before it is loaded; var registerQRCb = setInterval(function(){ //var nomeDoFlash = "QR" if( typeof QR === 'object' && QR != null && typeof QR.start === 'function' ){ clearInterval(registerQRCb) // first param is the function signature we want the SWF to call periodicaly // second param is the intervall we want it, in miliseconds (default: half-second) // third is an signature for callback if something goes wrong, aka, user has no Webcam (default: null) QR.start( "actQR", 200, "noWebcam" ) } }, 100)