Working with file uploads on IE9 and Rails < 4
I am trying to get back into the swing of documenting my findings as I wrestle with tough bugs and issues. Often times I just plough on with the solution but don’t bother to reflect on how I got to it, and it’s a valuable excercise to train one’s train of thought. In other words, warning: You are about to head into a rant of rabbit holes and sad IE exceptions.
Sadly though, some stories don’t end up with a happy closure. There are times where one must lick one’s wounds and surrender to a completely different solution than what one expected. Let me explain the quandary.
I’m working on a Rails 3 app which, among many other things, uploads files. A very simple operation that rails out of the box supports using its
ujs, but you can certainly switch over to jquery’s fine file upload plugin to gain access to drag-drop, and all sorts of other goodies. All is fine until we test in the only browser the client seems to like - good old IE9.
Turns out that ie9 doesn’t support XMLHttpRequest, but the workaround is to submit an
iFrame with the contents of our request. And in order to do that, one needs the ability to add hooks to jquery’s
ajax, which happens starting v1.5 (or perhaps write the entire
Once that was set up, I ran into older IE9 implementations not supporting Array.indexOf. That was finally fixed with a shim that gets included directly into the code, and at this point we’re ready to continue.
If you read this far down, your head must be hurting as much as mine. Brace yourself - we keep on going!
This brought me into diving into
jquery-ujs and how it was being used in the site. I spent too much time reading into it (but leanred a bunch on the actual implementation), only to come back to the crux of the matter: with some form changes (namely, adding a
submit input) I was finally sending the file to Rails, yet
fileuploader was not handling the response correctly.
I’ve tried every use-case, scoured the SO seas and spent a couple of days in the wonderful world of frontend exceptions and IE-specific woes. And at this point, I’ve reached too far in. Time to back out and actually throw a question out to the internet.
How it All Actually Ended Up
A coworker introduced me to Plupload, which was created in a previous era of aggressive browsers and little to no standarization. We have an app with older code that actually works with that, so I’m probably going to take that code and continue on with my life. Sometimes you have to take your learnings and move on.
I wonder how that applies to the rest of one’s life experience…