[whatwg] setting .src of a SCRIPT element

Ian Hickson ian at hixie.ch
Mon Jun 4 22:19:48 PDT 2007


On Wed, 30 May 2007, Jonas Sicking wrote:
>
> The reason I designed it this way was that it felt like the least 
> illogical behavior. In general a document behaves according to its 
> current DOM. I.e. it doesn't matter what the DOM looked like before, or 
> how it got to be in the current state, it only matters what's in the DOM 
> now. [...]

> For <script> things are a lot worse. If the contents of a <script> 
> element is changed it is impossible to 'drop' the script that was there 
> before. Once the contents of a <script> has executed, it can never be 
> unexecuted. And since we can't undo what the <script> has already done, 
> it feels weird to redo the new thing that you're asking it to do.
> 
> Another thing that would be weird would be inline scripts. How would the
> following behave:
> s = document.createElement('script');
> document.head.appendChild(s);
> for (i = 0; i < 10; i++) {
>   s.textContent += "a" + i + " += 5;";
> }
>
> Would you reexecute the entire script every time data was appended to 
> the script? Would you try to just execute the new parts? Would you do 
> nothing? IE gets around this problem by not supporting dynamically 
> created inline scripts at all, which I think is a really bad solution.
> 
> So I opted for 'killing' script elements once they have executed, they 
> become in effect dead elements. This felt simple and consistent.
> 
> I'm not sure what you mean when you say you need to "keep track of them, 
> and remove them from the document again". All you need to do every time 
> you want to execute a script is to insert a new DOM element in the head 
> of your page. It's not going to be a problem with having too many 
> <script> elements in the document unless you start executing millions of 
> scripts, at which point you'll have bigger performance issues.

On Thu, 31 May 2007, Jonas Sicking wrote:
> > >
> > > I don't see that being able to reuse elements adds any value. Could 
> > > you give an example where it does?
> > 
> > The global eval equivalent is an example. It's not much of an 
> > improvement over the cloneNode example but I'd like the performance to 
> > be as close to a plain eval as possible. Ability to switch type, 
> > charset, language attributes in chosen user agents may be useful for 
> > things like testing E4X support or ES4 support, or correct broken 
> > encodings. Ability to execute an external resource again may be 
> > useful. All of these are already possible however, so I don't think 
> > they are strong use cases.
> 
> If there aren't any strong use cases I think we should go with what's 
> simple.

I agree with Jonas here (and I apologise for not seeming to have the other 
side of this conversation; I assume I put it into another folder and will 
get to it in due course).

I haven't changed the spec, since the spec describes what Jonas says.

Please let me know if you disagree with this, especially if you find pages 
that break because of it.

-- 
Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'



More information about the whatwg mailing list