I noticed that the [UIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]
is only called with traditional <a href="...">
links and not single page web app JavaScript navigations.
For example, if I go to m.facebook.com in a UIWebView
and start tapping on the top nav (see screenshot below) it never triggers that delegate method.
The reason I want a method to hook into is because I want to add back and forward buttons above the UIWebView but I need to know when to enable/disable those buttons. Is there some other delegate method I should use to correctly listen to navigation changes?
Update: I should also note that mobile Safari correctly updates the back/forward button state on the Facebook mobile site, so I'd hope Apple exposes a way for developers to do this as well.
It seems like this is simply not supported by UIWebViewDelegate, nor WKNavigationDelegate (which I just tested with facebook). There are some options listed in this answer:
- javascript injection to capture the page changes (read up on history.pushState).
- KVO to watch for changes to the webview (like the scrollview resizing)
- watching for the title change, as above.
- checking for updates every time the user taps the view.
Update
I also tried this answer on facebook, which involves injecting javascript to catch XMLHTTPRequests during each new page load. It sort of does what you're asking for, but is a bit of a hack. Some of the facebook tabs don't work properly with a very simple implementation, but you may be able to work around the issues.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With