[whatwg] Review of the 3.16 section and the HTMLInputElementinterface

Matthew Paul Thomas mpt at myrealbox.com
Thu May 15 15:04:19 PDT 2008


On May 15, 2008, at 8:33 PM, Jon Barnett wrote:
> ...
> The Yahoo! UI toolkit [1] allows a developer to create a "browse" that
> looks like whatever he wants it to and can be controlled by javascript
> pretty much however he wants it to.
> ...
> That Yahoo widget uses Flash and Javascript to make all that happen.
> Adobe isn't going to take this feature of Flash away (Javascript
> control of a file dialog) and I wouldn't expect browsers to try to
> block it.
>
> The W3C File Upload [2] draft allows for the something similar using
> plain javascript without the requirement for Flash, and there are
> already implementations in the wild.
> ...
> These aren't features you're going to take away from today's users of
> popular web applications.  Those features are here to stay.

Imagine that there is a popular mobile device with a Web browser. 
Imagine further that this browser is widely used, despite having no 
support for Flash, no support for W3C File Upload, and not even any 
support for <input type="file">. I know, I know, this seems 
unrealistic, because "those features are here to stay", but humor me 
here for a moment. For ease of discussion, let's call this device the 
"iPhone".

> ...
> One problem with either the Yahoo widget or the File Upload draft is
> that they both require Javascript to function.  If you want these
> features to be accessible to non-Javascript enabled browsers, we'll
> need to include it in HTML.  It would probably call for a new <input>
> type with a more specific, flexible presentation (i.e. just a button
> that can be styled with CSS)

Imagine further that this "iPhone" has no user-visible file system. It 
stores music, but annoyingly, the device vendor doesn't want to let 
people upload songs to Web sites. What the vendor *does* want to let 
people do is upload photos to Web sites, so that they can use sites 
like Flickr or even post photos to their Weblogs from the road.

So the "iPhone" vendor implements <input type="file"> just for photos. 
It's rendered in a Web page as three components: (1) a button for 
taking a new photo, (2) a button for choosing an existing photo, and 
(3) a thumbnail of the selected photo. There's no "filename": that 
wouldn't make any sense, because device has no user-visible files. And 
there's no button labelled "Browse…": that wouldn't make any sense, 
because -- well, shoot, that label's never made sense on any platform.

A Web author couldn't implement anything nearly as useful as this using 
a new control with a "more specific, flexible presentation" -- and 
they'd need JavaScript to even come close. The UA, on the other hand, 
can customize the file upload control based on the accept= attribute 
provided by the author, the presence or absence of a camera, whether a 
camcorder is connected, whether a microphone is available, whether 
available input devices are such that direct entry of a text document 
is feasible, and so on, all regardless of whether JavaScript is 
available.

> I don't see how customizing the look of the file dialog's button is a 
> security risk.  Sure, the button might say something malicious, but it 
> still requires the user to browser his local files, choose a file, and 
> click "Open".

It's a security risk in those browsers where <input type="file"> 
contains an editable text field, because a page could trick you into 
typing the pathname of a confidential file into the field, and the 
button would no longer warn you that it wasn't an innocent text field. 
In browsers (such as Firefox 3, as Jonas just mentioned) where the 
field is not editable, the button is safer to style -- but if you're 
assuming the control contains only one button, you might produce ugly 
results on devices where it has more.

> ...
> If Javascript is as an acceptable requirement, another problem with
> those solutions is that they require separate POSTs.  The Yahoo
> uploader uses a separate request for each file.  The File Upload API
> has functions like getDataAsHexBinary that, I guess, could put a
> file's data into a hidden input field, but that data still wouldn't be
> uploaded the same way regular <input type=file> is uploaded (as
> multipart/form-data with headers for each file, etc).
> ...

Web Forms 2.0 already defines min= and max= attributes for this purpose.

Cheers
-- 
Matthew Paul Thomas
http://mpt.net.nz/




More information about the whatwg mailing list