W3C home > Mailing lists > Public > www-style@w3.org > February 2016

Re: Allow auto-resize on iframe

From: Ojan Vafai <ojan@chromium.org>
Date: Wed, 24 Feb 2016 01:10:12 +0000
Message-ID: <CANMdWTuJg94g9QTLgty6Xa1THPZhM59CBXBwVfz-AZNYAmOdxg@mail.gmail.com>
To: "Tab Atkins Jr." <jackalmage@gmail.com>, Lea Verou <lea@verou.me>
Cc: Craig Francis <craig.francis@gmail.com>, Xidorn Quan <quanxunzhen@gmail.com>, Simon Fraser <smfr@me.com>, www-style list <www-style@w3.org>, Aleks Totic <atotic@google.com>, Elliott Sprehn <esprehn@google.com>, Ian Kilpatrick <ikilpatrick@google.com>
I just want to clarify a couple things:
1. In the code snippet I showed, the user would not see flicker given the
way ResizeObserver is specced to loop. A solution where the user saw
flicker would be unacceptable IMO.
2. WebKit has frame-flattening, but it's not exposed in a way that web
authors have meaningful control over.

On Tue, Feb 23, 2016 at 3:08 PM Tab Atkins Jr. <jackalmage@gmail.com> wrote:

> On Tue, Feb 23, 2016 at 1:37 AM, Craig Francis <craig.francis@gmail.com>
> wrote:
> > Your ResizeObserver solution may fix your immediate rendering loop
> problems
> > in Chrome, but the end user will still see a rendering loop, as the
> iframe
> > will still jump between two or more sizes (but now there is a few ms gap
> > between them).
>
> Yeah, this ends up being similar to :hover loops, which cycle at a
> speed the user can actually see.  Moving the loop into internal logic
> means we actually need to address it; we can no longer say "don't do
> that" if it hard-locks an algorithm.
>
> On Tue, Feb 23, 2016 at 1:37 AM, Craig Francis <craig.francis@gmail.com>
> wrote:
> > I don't care about your distinction between imperative and declarative,
> my
> > view has always been that CSS focuses on styles and layout, and
> JavaScript
> > focuses on the behaviour (anyone on the www-style mailing list like the
> > confirm/deny this?).
>
> The distinction is very porous and wishy-washy. Good as a general
> principle, but don't worry about trying to guide behavior from it.
>
> > I also believe the current recommendation is for JavaScript to simply
> > add/remove classes on elements, rather than setting styles directly... as
> > Paul Irish recently pointed out:
>
> This are specific reasons for this that don't apply to the scenario
> we're talking about.
>
> > So I think ResizeObserver is going in the wrong direction. It might be
> > useful in some rare cases, but not so much here.
>
> How is it not useful here?  What "rare cases" are you imagining it
> being limited ot?
>
> > My main concern is your comment "we enable a broad swath of new
> capabilities
> > with one API".
> >
> > I've heard this argument too many times before, rather than coming up
> with a
> > nice and simple solution to a problem, there seems to be this desire to
> come
> > up with a solution that fixes *everything*, but that solution often
> becomes
> > too complicated to use, or simply never gets built.
>
> All approaches are bad, for various reasons.  Note, tho, that this is
> *not* trying to "fix everything", in fact it's doing the exact
> opposite - it's trying to identify the *one* piece of missing
> functionality (easy notification of when an element changes size) and
> providing just that, relying on JS's status as a general-purpose
> language to hook it up to any specific use-cases.  We've been trying
> to use this strategy for new features in the web platform for a few
> years now, and it's starting to pay off.
>
>
> On Tue, Feb 23, 2016 at 1:45 AM, Lea Verou <lea@verou.me> wrote:
> >> On 23Feb, 2016, at 04:37, Craig Francis <craig.francis@gmail.com>
> wrote:
> >>
> >> Just to add to this (again, going a bit off topic, please feel free to
> ignore)....
> >>
> >> [snip]
> >>
> >> And I personally don't see myself using ResizeObserver, as it will take
> a very long time for it to be implemented, and I can't see how it will make
> any improvements over my current JavaScript "solution", which at least
> supports legacy browsers.
>
> "It will take a long time to be implemented" is a common but invalid
> reason to support a *different* unimplemented solution.
> height:max-content wouldn't happen any *faster* - the hard part is the
> plumbing inside the browser, which would be identical for either case.
>
> Or worse - if you do require sync resize, the code is more complex
> than allowing a frame of delay.  But this isn't important for the 90%
> use-case, which is just using sandboxed iframes as a safe way to host
> untrusted content - at worst, async resize will give a frame of
> flicker during the initial layout.
>
> So if the implementation delay is sufficient to make you think you
> wouldn't use ResizeObserver, then it's sufficient to make you think
> you wouldn't use height:max-content either.  In either case you'll
> have to wait for implementations, and deploy a polyfill for legacy
> browsers.  And that's assuming that the two of them would have
> perfectly equivalent timelines.
>
> > Again, completely agreed with Craig. I’m not quite sure how this
> convoluted ResizeObserver solution is better than what we currently have,
> given that it's also same origin (or did I misunderstand?).
>
> It's better than the code you have to write *today* to get the same
> effect.  Do you honestly think those five lines are "convoluted"?
> They seem ridiculously straightforward and simple to me, roughly the
> easiest it can possibly be made in script - watch the internal <html>
> for resizes, then resize the outer <iframe> element based on that.
>
> > Good thinking re:general APIs first and shortcuts later, but there *is*
> such a thing as too much generalization. Let's not turn the Web platform
> into Java, please.
>
> I don't understand what you mean by this.  The EWP manifesto is not
> about turning anything into Java.  The browser standard library is
> very big, and really weird and inconsistent.  We need to be better
> shepherds of expanding it, and one way to do that is to first always
> expand at the "new capability" level, which means in JS, because
> that's low-impact.  Afterwards, when we see usage and patterns, we can
> backfill declarative solutions based on the new capability.  Doing it
> the other way around has a really mixed track record.
>
> > Also not sure what is meant by `// inside the frame` in the code sample.
> Is this code supposed to be called from inside the iframe? In that case, it
> doesn't solve the overwhelming majority of use cases for this, where the
> parent wants to resize the iframe and the iframe has no idea.
>
> That was for simplicity; if you're starting from outside the iframe
> the code is just a teensy bit more complex to set up in reverse.  I
> recommend actually sitting down and understanding what the example is
> doing; it's relatively simple, and doing so would have answered these
> questions for you already.
>
> ~TJ
>
Received on Wednesday, 24 February 2016 01:10:53 UTC

This archive was generated by hypermail 2.4.0 : Friday, 25 March 2022 10:09:00 UTC