FileReader icon indicating copy to clipboard operation
FileReader copied to clipboard

IE9 Flash callback issues

Open k3mist opened this issue 11 years ago • 2 comments

I am having problems in IE9 with the Flash FileReader callbacks that I can not resolve. After trying to figure this out over a weekend I found what I think may be the problem. I am using the FileAPI polyfill to get the files list in IE9 (which I imagine should not be an issue). This code should work I believe unless I really am doing something wrong here.

Filereader options

filereader:
    id: 'fileAPIProxy'
    filereader: '/assets/libs/webshims/vendor/filereader/filereader.swf'
    expressInstall: '/assets/libs/webshims/vendor/swfobject/expressinstall.swf'

Binding handler code (with feature detection removed)

   isImage = (file) ->
       file and typeof file.type isnt "undefined" and file.type.match('image.*') and file.name.match(/\.(gif|png|jpe?g)$/i)

   $(element).fileReader(viewModel.filereader).on(
      change: (event) ->
        file = FileAPI.getFiles(event)[0]
        if isImage(file)
          reader = new FileReader()
          reader.onload = (event) -> koPhoto.photo_uri(event.target.result)
          reader.readAsDataURL(file)
    )

The Flash callback that is issuing the JS error when readAsDataURL() is executed is below. This link references the Flash Callback problems in IE; http://zaalabs.com/2011/01/adobe-flash-externalinterface-issues-with-internet-explorer/

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

k3mist avatar Jul 15 '13 19:07 k3mist

There should be no need to use the FileAPI polyfill.

Bind the change event in the callback function of the FileReader as described in the readme and you will be able to access the file using event.target.files.

Hope this helps.

dirty example working in IE9:

$("#input").fileReader
        id: "fileReaderSWFObject"
        filereader: "/flash/filereader.swf"
        callback: =>
          $("#input").change (e) =>
           # access e.target.files

matthiasleitner avatar Oct 22 '13 07:10 matthiasleitner

resurrecting this... My callback is never firing, I get no feedback from the plugin even though debug mode is on.

whatisboom avatar May 08 '15 19:05 whatisboom