i-k*_*nov 21 wkwebview wknavigationdelegate
有没有办法让WKWebView每个请求加载一个FULL URL ?
webView:didFinishNavigation:
Run Code Online (Sandbox Code Playgroud)
仅适用于mainFrame导航,不提供URL请求参数.
如何获得完整的URL只是喜欢UIWebViewDelegate的
webViewDidFinishLoad:webView
Run Code Online (Sandbox Code Playgroud)
...在任何加载完成后调用,您可以从webView参数中获取完整的请求URL .
很好WKWebView的是,URL属性可以节省提取UI友好的基本URL所需的工作,但这是一个巨大的损失,我们无法获得完整的URL!
我试过用
webView:decidePolicyForNavigationAction:decisionHandler:
Run Code Online (Sandbox Code Playgroud)
...但是,与完成页面加载后UIWebView的request属性相比,它会产生不同的URL结果.
Yui*_*ato 17
您可以通过decisionPolicyForNavigationAction委托方法中的"navigationAction.request.URL"获取新请求的网页的URL.
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
if let urlStr = navigationAction.request.URL?.absoluteString{
//urlStr is what you want, I guess.
}
decisionHandler(.Allow)
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*ntz 14
首先,我认为你是混乱NSURL和NSURLRequest.第一个是可以随时访问的webView.URL,它确实为您提供了所有加载的完整URL.假设你说URL的意思NSURL.
如果这不是你的意思,例如,如果你想看到重定向链或响应标题,那么我担心的答案是你无法通过它获得具体的信息WKWebView.
您将不得不回到UIWebView可以相对容易地拦截请求的位置并查看完整的请求/响应.
这是Yuichi Kato对Swift 4 的回答.它从方法中request的导航动作的属性中检索完整的URL .webView(_:decidePolicyFor:decisionHandler:)WKNavigationDelegate
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let urlStr = navigationAction.request.url?.absoluteString {
//urlStr is what you want
}
decisionHandler(.allow)
}
Run Code Online (Sandbox Code Playgroud)
不要忘记将您的班级WKNavigationDelegate与您的班级相符并相应地设置您的Web视图的委托:
class WebViewController: UIViewController, WKNavigationDelegate
[...]
webView.navigationDelegate = self
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28233 次 |
| 最近记录: |