IOS - 当第二次点击同一个按钮时,WKWebview 在 decidePolicy 中得到 null url
IOS - WKWebview gets null url in decidePolicy when second clicking the same button
我有一个WKWebview
有一个下载pdf的按钮,按钮link如下:
<a href="https://mysite.appiancloud.com/suite/rest/a/content/latest/igB-Xg0UyTkBidWeSJGldcpdb0wlYmynKQi_fRvbd5xpczwkJJXkcYS/o"><img class= src="$imageurl"></a>
我已经通过某种逻辑成功地下载了 PDF,该逻辑在 decidePolicyFor
方法中有一个起点:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
let url = navigationAction.request.url
if openInDocumentPreview(url!) {
decisionHandler(.cancel)
executeDocumentDownloadScript(webView, forAbsoluteUrl: url!.absoluteString)
} else {
decisionHandler(.allow)
}
}
这很好用,url 是带有 PDF 的那个。但是,如果我再次单击该按钮,我只会收到 null
urls,因此我无法再次打开该文档。这是我收到的操作:
<WKNavigationAction: 0x102d95fa0; navigationType = -1; syntheticClickType = 0; position x = 0.00 y = 0.00 request = <NSMutableURLRequest: 0x282e151d0> { URL: about:blank }; sourceFrame = <WKFrameInfo: 0x102d502f0; webView = 0x103048200; isMainFrame = YES; request = <NSMutableURLRequest: 0x282e116d0> { URL: https://mysite.appiancloud.com/suite/sites/home }>; targetFrame = <WKFrameInfo: 0x102d577a0; webView = 0x103048200; isMainFrame = NO; request = (null)>>
如果我在 Safari 桌面上对此进行测试,文件每次都可以正常下载,但是我找不到 WKWebView 停止接收 url 的原因。没有调用其他委托方法,甚至没有调用 target="_blank" url 时倾向于调用的 createWebViewWith
。
我想知道 WKWebview cachePolicy 是否生效,但我没有找到避免 url 缓存的方法,或者如果它正在缓存,则在它尝试加载时接收事件又来了。
此外,请注意,如果我长按 link,预览元素会正确显示 URL。
好的,我的理论是,通过告诉处理程序 WKNavigationAction
策略是 .cancel
,将不会处理以下请求。
我做的是在createWebViewWith
方法中处理URL下载,让policy一直是.allow
.
我有一个WKWebview
有一个下载pdf的按钮,按钮link如下:
<a href="https://mysite.appiancloud.com/suite/rest/a/content/latest/igB-Xg0UyTkBidWeSJGldcpdb0wlYmynKQi_fRvbd5xpczwkJJXkcYS/o"><img class= src="$imageurl"></a>
我已经通过某种逻辑成功地下载了 PDF,该逻辑在 decidePolicyFor
方法中有一个起点:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
let url = navigationAction.request.url
if openInDocumentPreview(url!) {
decisionHandler(.cancel)
executeDocumentDownloadScript(webView, forAbsoluteUrl: url!.absoluteString)
} else {
decisionHandler(.allow)
}
}
这很好用,url 是带有 PDF 的那个。但是,如果我再次单击该按钮,我只会收到 null
urls,因此我无法再次打开该文档。这是我收到的操作:
<WKNavigationAction: 0x102d95fa0; navigationType = -1; syntheticClickType = 0; position x = 0.00 y = 0.00 request = <NSMutableURLRequest: 0x282e151d0> { URL: about:blank }; sourceFrame = <WKFrameInfo: 0x102d502f0; webView = 0x103048200; isMainFrame = YES; request = <NSMutableURLRequest: 0x282e116d0> { URL: https://mysite.appiancloud.com/suite/sites/home }>; targetFrame = <WKFrameInfo: 0x102d577a0; webView = 0x103048200; isMainFrame = NO; request = (null)>>
如果我在 Safari 桌面上对此进行测试,文件每次都可以正常下载,但是我找不到 WKWebView 停止接收 url 的原因。没有调用其他委托方法,甚至没有调用 target="_blank" url 时倾向于调用的 createWebViewWith
。
我想知道 WKWebview cachePolicy 是否生效,但我没有找到避免 url 缓存的方法,或者如果它正在缓存,则在它尝试加载时接收事件又来了。
此外,请注意,如果我长按 link,预览元素会正确显示 URL。
好的,我的理论是,通过告诉处理程序 WKNavigationAction
策略是 .cancel
,将不会处理以下请求。
我做的是在createWebViewWith
方法中处理URL下载,让policy一直是.allow
.