[whatwg] API to delay the document load event
David Bruant
bruant.d at gmail.com
Sun Apr 28 15:10:00 PDT 2013
Le 28/04/2013 23:08, Glenn Maynard a écrit :
> On Sun, Apr 28, 2013 at 1:00 PM, David Bruant <bruant.d at gmail.com
> <mailto:bruant.d at gmail.com>> wrote:
>
> Each widget needs some way to express that it's ready, but doesn't
> necessarily need to express it to the document directly. A "widget
> manager" can load the widgets, gather all widgets "ready" events
> and trigger the UA "AppReady" event when the widgets are ready.
>
>
> You shouldn't have to roll your own API to do this, because then you
> end up only being able to use code that uses the same solution as
> everything else (or gives a hook, which is a needless complication).
> Give everyone a consistent solution to begin with, and you avoid that
> problem.
Not necessarily. I believe Caja [1] is capable of doing that (see below
for explanations)
>
> I don't think we should be promoted patterns where widget are
> fully independent which is pretty much the equivalent of a script
> injection (where anything can happen, like one forgetting to call
> its delay.finished()).
>
>
> I think you're confusing widgets (more generally, code libraries) with
> sourcing code from untrusted sites. Obviously nobody should do that,
> but it has nothing to do with this.
> On Sun, Apr 28, 2013 at 1:21 PM, David Bruant <bruant.d at gmail.com
> <mailto:bruant.d at gmail.com>> wrote:
>
> In the Firefox bug, roc suggested [1]:
> "let the app specify <html loading>, and remove the attribute when
> done. (...) use a mutation listener to detect its removal."
> This is delightful; my new favorite idea on the topic. We don't
> need anything more.
>
>
> As soon as two bits of code try to use this, each unaware of the
> other, chaos will ensue as they stomp on the attribute set by the
> other. This is more or less a global variable.
Two pieces of code each unaware of the other making chaos because of
accessing the same global state is a form of script injection. Some call
it the mashup problem. The only way I know to solve this problem is to
have a what I described as a "widget manager". Caja can be used for that
[1].
Interestingly, Caja gives each widget the impression it lives on its own
page (although they actually all cohabit in the same page without
iframes!), with each its own load event. The "caja manager" (I don't
know the real name) could gather the widgets delayed loads and delay
until the latest widget has emitted "load". No need for all widgets to
work under a custom API, they just use the standard one. This can work
too if a new "AppReady" event is created, or if an html at loading
attribute is added (the "caja manager" will listen to this new event or
attribute removal in all the widgets and emit its own event or remove
the global attribute when the widgets are done).
Anyway, I believe widgets "each unaware of the other" are a solved
problem and do not require a dedicated API. I'm not a Caja expert, but
the team behind it will probably be happy to answer any questions on the
topic [2].
David
[1] https://developers.google.com/caja/
[2] https://groups.google.com/forum/?fromgroups#!forum/google-caja-discuss
More information about the whatwg
mailing list