Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does creating a video element dynamically using jQuery not work in IE9

I am trying to recreate the following with Jquery

<video width="640" height="264" autoplay>
    <source src="http://video-js.zencoder.com/oceans-clip.mp4" type="video/mp4" />
    <source src="http://video-js.zencoder.com/oceans-clip.webm" type="video/webm" />
    <source src="http://video-js.zencoder.com/oceans-clip.ogv" type="video/ogg" />
</video>

http://jsfiddle.net/4bkpU/2/

I have come up with the following but in IE9 the video element is empty, can anyone tell me why and what I would need to change to be able to dynamically add videos in IE9? It works fine in Firefox, Chrome and Safari.

HTML

<div id="videoHolder">
</div>

JQuery

var video = $('<video width="640" height="264" autoplay></video>')
            .append('<source src="http://video-js.zencoder.com/oceans-clip.mp4" type="video/mp4" />')
            .append('<source src="http://video-js.zencoder.com/oceans-clip.webm" type="video/webm" />')
            .append('<source src="http://video-js.zencoder.com/oceans-clip.ogv" type="video/ogg" />')
            .appendTo($("#videoHolder"));

UPDATED - closed the video tag above and addded new link

http://jsfiddle.net/8Cevq/

like image 643
Tom Avatar asked Aug 24 '11 11:08

Tom


2 Answers

Try the following, this works:

$("#videoHolder").html(
    '<video width="640" height="264" autoplay>' +
        '<source src="http://video-js.zencoder.com/oceans-clip.mp4" type="video/mp4"></source>' +
        '<source src="http://video-js.zencoder.com/oceans-clip.webm" type="video/webm"></source>' +
        '<source src="http://video-js.zencoder.com/oceans-clip.ogv" type="video/ogg"></source>' +
    '</video>');

JSFIDDLE example.

What I did to get this working was:

  • A) use the html method to inject the desired mark-up all at once
  • B) Altered tags (on both video and source) to use full closing tags as opposed to shorthand />

A rather cool video, by the way.

like image 57
Grant Thomas Avatar answered Oct 12 '22 06:10

Grant Thomas


IE9 doesn't like it when you add the <video> element's contents dynamically, so you must add the <video> element and it's contents all at once.

Note: IE9 doesn't seem to have a problem with the shorthand <source ... /> as long as you don't try to add it afterwards.

like image 36
thingEvery Avatar answered Oct 12 '22 06:10

thingEvery