有没有办法让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结果.
这是我的情况:
我在 WKWebView 中有一个视图控制器。该网络视图以页面“A”开始。在此页面中有一些链接(href),我希望其中一些链接必须在外部浏览器中打开。
为此,我设置了 WKWebView 委托:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = webView.url?.absoluteString
{
if(self.isExternalURL(url))
{
let urlT = URL(string: url)!
decisionHandler(.cancel)
UIApplication.shared.open(urlT, options: [:], completionHandler: nil)
}
else
{
decisionHandler(.allow)
}
}
else
{
decisionHandler(.allow)
}
}
private func isExternalURL(url:String) -> Bool
{
//......check link
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我选择外部链接,外部浏览器会打开,但 webview 不会保留在页面 A 上,但它也会加载外部链接,而我希望它保留在页面 A 上。
我不知道为什么
我设置了该WKScriptMessageHandler函数userContentController(WKUserContentController, didReceive: WKScriptMessage)来处理发送到本机应用程序的 JavaScript 消息。我提前知道消息正文总是会返回相同的字段。如何将WKScriptMessage.body, 声明为Any结构体?