我使用Swift开发了混合iOS应用程序,想要在WKWebView中检测history.pushstate()。我尝试重写WKWebView的方法,但是没有检测到任何内容。
有没有什么方法或技巧可以检测history.pushstate()
我使用Swift开发了混合iOS应用程序,想要在WKWebView中检测history.pushstate()。我尝试重写WKWebView的方法,但是没有检测到任何内容。
有没有什么方法或技巧可以检测history.pushstate()
这确实是一个解决方法,但如果您可以编辑内置对象的属性(像大多数浏览器中那样),您可以包装两个函数并使用拦截处理程序来跟踪它们何时被调用:
function track (fn, handler) {
return function interceptor () {
handler.apply(this, arguments)
return fn.apply(this, arguments)
}
}
history.pushState = track(history.pushState, function (state, title, url) {
// do something with `state, `title`, and `url`
console.log('pushState called with:', { state: state, title: title, url: url })
})
history.replaceState = track(history.replaceState, function (state, title, url) {
// do something with `state, `title`, and `url`
console.log('replaceState called with:', { state: state, title: title, url: url })
})
history.pushState(null, 'Title 1', '/example-page')
WKWebView.url
。var urlObservation: NSKeyValueObservation?
...
let webView = WKWebView(...)
urlObservation = webView.observe(\.url, changeHandler: { webView, change in
print("url changed")
})
看起来Firefox for iOS也在使用这种方式。