[webkit-dev] autocomplete/autologin functionality question
David D. Kilzer
ddkilzer at kilzer.net
Wed Dec 13 04:23:43 PST 2006
I'm not a WebKit expert (nor do I play one on TV), but here's my two
cents.
As I understand it, the autocomplete/autologin/autofill functionality
that you see in Safari is a part of Safari, not WebKit. That means
that you'll have to implement this feature yourself for your own
application. The good news is that you may reuse the system-wide
Keychain for usernames and passwords. The "bad" news is that you'll
have to come up with your own heuristics for autofilling a form. For
example, you must determine when a form is a login form and which
fields need a username and password (hint: look for an <input>
element of type="password" in a form on the page). Note that it may
be possible to reverse-engineer the autofill data stored in your home
directory--probably in ~/Library/Safari/Form Data, although a quick
look tells me that file may be encrypted. Finally, note that sites
using "basic" or "digest" authentication are much easier to identify
since they're based on the HTTP protocol.
As far as doing button presses or other DOM manipulation, just
pretend you want to do the same thing in JavaScript. In JavaScript,
you must get a reference to the button object in the DOM (either by
name, or by id, or by iterating over a list of objects in a <form>),
then you must call the click() method on the button object. When you
want to do the same thing from Cocoa via WebKit, the JavaScript
interface for most objects has been "duplicated" in Objective-C!
(That's what all the *.idl files are used for during the build--to
generate the JavaScript interface as well as an Obj-C interface.)
The trick is to determine the method(s) to call, and then figure out
how to call them. (Note that I haven't done this myself--this is
just the way I think it works. :)
In addition to the Obj-C interface, it's also possible to take the
JavaScript code for clicking your button, and pass that (as a string)
to a WebKit method that will run it as if it were on the page.
Again, I know it's possible to do, but I haven't actually written
code to do this. You'll need to do some more research to find out
how. (I think this method is slower than direct DOM manipulation,
though, so I'd only use it as a last resort or an initial just-get-it-
working implementation.)
Hope that helps!
Dave
On Dec 10, 2006, at 7:07 AM, Alexander Huber wrote:
> Hello all!
>
> first I would like to say hello - I'm a fairly 'fresh' cocoa
> developer exploring the webkit and new to this list.
>
> I have a very specific question concerning autocomplete/autologin
> functionality:
>
> I want to write an application (cocoa) that operates like a
> webspider (take a given url, explore content and traverse links up
> to a specified recursion depth) - showing up differences in the
> content compared to my LAST exploration run.
>
> Now I want to login to specific sites that require authorization,
> and I don't know how to achieve this using webkit/webview... I
> think I somehow have to auto-fill the forms on the pages, but I
> haven't found a solution yet.
>
> How do I simulate a 'button press' on a site? A search button, for
> example, that I want to trigger after having filled a search
> field... I know that most 'search' buttons react on pressing
> 'enter' while the corresponding form field has the focus, but I
> would like to be 100% sure to press a specific button on a page.
>
> If someone would be so kind to show me some documentation, starting
> points, code hints or even apis I would appreciate it very much!
>
> Thank you all,
> Alex
More information about the webkit-dev
mailing list