在8.0以后,如果需要做先加载后跳转,可以KVO监听webView的loading属性来作跳转判断的时机.
OC代码:
[
self
.
webView
addObserver
:
self
forKeyPath
:
@"loading"
options
:
NSKeyValueObservingOptionNew
context
:
nil
];
- (
void
)observeValueForKeyPath:(
NSString
*)keyPath ofObject:(
id
)object change:(
NSDictionary
<
NSString
*,
id
> *)change context:(
void
*)context
{
if ( self . webViewIndex == 0) {
if ([change[ @"new" ] boolValue ] == 0) {
[ YKBNotificationCenter postNotificationName : YKBCloseAniNotification object : nil userInfo :@{ YKBURLString : self . urlString }];
}
}
{
if ( self . webViewIndex == 0) {
if ([change[ @"new" ] boolValue ] == 0) {
[ YKBNotificationCenter postNotificationName : YKBCloseAniNotification object : nil userInfo :@{ YKBURLString : self . urlString }];
}
}
}
- (
void
)dealloc
{
[ self removeObserver : self forKeyPath : @"loading" ];
{
[ self removeObserver : self forKeyPath : @"loading" ];
}
swift代码:
class Myweb: WKWebView {
func setupWebView(link: String) {
let url = NSURL(string: link)
let request = NSURLRequest(URL: url!)
loadRequest(request)
addObserver(self, forKeyPath: "loading", options: .New, context: nil)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
guard let _ = object as? WKWebView else { return }
guard let keyPath = keyPath else { return }
guard let change = change else { return }
switch keyPath {
case "loading":
if let val = change[NSKeyValueChangeNewKey] as? Bool {
if val {
} else {
print(self.loading)
//do something!
}
}
default:break
}
}
deinit {
removeObserver(self, forKeyPath: "loading")
}
}