[whatwg] When to stop <video> elements from playing
Jonas Sicking
jonas at sicking.cc
Fri Oct 19 15:09:02 PDT 2007
Robert O'Callahan wrote:
> On Oct 19, 2007 11:55 AM, Geoffrey Garen <ggaren at apple.com
> <mailto:ggaren at apple.com>> wrote:
>
> > Suppose a script creates a <video> element, adds it to the document,
> > starts it playing, then removes the element from the document and
> > drops all references to it. When should the element stop playing?
>
> > -- when the element leaves the document?
>
> Probably. Since you can't see the video any more, it would be really
> weird to hear audio from it, or waste computer resources on a mute and
> invisible video. Moreover, there's a lot of precedent for DOM elements
> not loading when they're not in the document. This is true of iframe,
> script, img, etc.
>
>
> It's not true of <img>. Javascript image preloading tricks rely on it.
>
> And as Maciej mentioned, it would be useful to be able to play audio
> outside the document, and to be consistent, <video>'s behaviour should
> match.
Image is one of very few exceptions to the rule that elements become
active only when they are inserted into the document. And partially this
is due to DOM0 behavior that was designed before there was an actual DOM
you could insert your images into. I.e. it stems from people using the
following syntax:
myimg = new Image();
myimg.src = "myimg.gif";
function showImg() {
document.images[5].src = "myimg.gif";
}
So I don't think it's a precedent we need to follow. There is much more
precedent for only making elements active once they are inserted into
the document.
> > -- when all JS references to the element have been dropped (and
> > garbage collection runs)?
>
> No. The time at which garbage collection will reclaim an object is
> unpredictable, so relying on garbage collection for behavior is a bad
> idea.
>
> Agreed.
If we let <video>s or <audio>s play even when out of the document I
don't see how we could avoid this. Or do you mean by 'play' only move
forward in their time-position, not emit sound?
What happens in opera is if you do:
myAudio = new Audio("foo.wav");
myAudio.onload = function () {
this.play();
myAudio = null;
}
When will the audio stop playing?
> My current opinion is that <audio> and <video> elements should behave
> like <img> and load/play whether or not they're in a document, but they
> should only emit sound if they're in a document with a presentation and
> are not in a display:none subtree. Then to play a sound you'd have to
> insert the element into your document somewhere with size 0x0 (which
> should be the default for <audio>).
>
> But it's a rather tangled issue.
It would make sense to me if we started loads as soon as the
<audio>/<video> was created. I'm much less convinced that elements out
the the DOM should emit sound. Though the API anne describes of using
pure JS objects does make a lot of sense.
/ Jonas
More information about the whatwg
mailing list