There was a discussion yesterday on IRC about abstracting/hiding WKWebView. I 
would like to make a counter argument here and suggest we embrace the the 
WKWebView APIs fully and not try to hide its existence.

Currently we have wrapped WKWebView in a Browser object. The Browser has 
functions like canGoBack() and goBack(). I think this is redundant because 
these map 1:1 to the WKWebView.

This adds a layer of complexity that we don’t need. Instead I would like to be 
able to freely access the WKWebView and for example use Key-Value Observing to 
update user interface elements (and internal logic) when the WKWebView’s state 
has changed.

A good example of the power of directly talking to the WKWebView combined with 
KVO is this:

        
https://gist.github.com/st3fan/df6e470f177044a41436#file-gistfile1-swift-L123

Here we have a LocationTextField that only needs to know what WKWebView it is 
currently connected to. It then starts observing for URL changes and security 
changes and updates its UI accordingly. The URL is now always up to date and 
when the page has secure content, the location field turns green. Look how 
little code this is. This is the Cocoa way of doing things. If we abstract away 
the WKWebView then we are basically going to reinvent all of this by 
introducing delegates and extra infrastructure code to do what the framework is 
already giving us.

The same mechanism can be used for progress tracking, keeping back/forward 
button state correct, showing a title, acting on page loads and a bunch more 
things.

I think we should realize that WKWebView is the way forward on iOS. UIWebView 
will likely be deprecated by iOS9 (which is summer next year) and Gecko will 
never happen on this platform because the App Store forbids it. So lets use 
WKWebView as a first class object and take advantage of the things it gives us.

What do you think?

 S.

_______________________________________________
mobile-firefox-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/mobile-firefox-dev

Reply via email to