WKWebView没有加载链接。我将用户链接到隐私策略页面,并且该页面具有一组链接。链接都是wix托管的所有pdf文件。在safari和Chrome上可以使用,但不能在WKWebView上使用。页面加载后,您单击链接,我得到一个错误:
Unknown result for URL 0x28157d110 (https)
这就是我加载网络视图的方式...
webView.load(URLRequest(url: URL(string: "https://mywebsite.io/legal")!))
编辑:这是different from other questions,因为我无意下载pdf-我只想以与Safari相同的方式显示它。
编辑:我刚刚将WKWebView替换为UIWebView(已弃用),并加载了pdfs。问题在于WKWebView。 Pdfs已启用ssl https->
let req = URLRequest(url: URL(string: "https://mywebsite.io/legal")!)
legacyWebView.loadRequest(req)
编辑:How to open a Link to a PDF with wkwebview上有一个页面,建议您在打开pdf之前必须知道链接URL,但是我认为这不是事实。
编辑:我实现了2个委托方法,包括@Kiril在下面建议的一种方法。 pdf链接仍然无法打开。
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(WKNavigationActionPolicy.allow)
}
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
decisionHandler(WKNavigationResponsePolicy.allow)
}
答案 0 :(得分:3)
很可能,您正在锚标记中使用target =“ _ blank”。这将打开一个新窗口以显示链接。 WKWebView阻止您尝试打开新窗口(至少默认情况下)。
下面的代码仍然不会创建新窗口,而是在当前WKWebView中打开PDF等链接。 另一个选择似乎是创建一个新的WKWebView并返回它,以便ios可以在其中打开链接。我不希望每次在WKWebView内的网站上单击都可以创建额外的视图。
在您的ViewController.viewDidLoad
webView.uiDelegate = self
然后添加代表的扩展名
extension ViewController: WKUIDelegate {
/**
* Force all popup windows to remain in the current WKWebView.
* By default, WKWebView is blocking new windows from being created
* ex <a href="link" target="_blank">text</a>.
* This code catches those popup windows and displays them in the current WKWebView.
*/
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
// open in current view
webView.load(navigationAction.request)
// don't return a new view to build a popup into (the default behavior).
return nil;
}
}
答案 1 :(得分:0)
我可以建议的一件事(不确定是否会有所帮助,但评论时间太长)是尝试实现WKNavigationDelegate的decidePolicyFor
:
// WKNavigationDelegate
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(.allow)
}
如果有帮助,则使该功能更精细,即您只需要为PDF而不是世界上所有其他东西启用哪种导航。
答案 2 :(得分:0)
您可以检查几件事:
验证<a href
链接不包含target="_blank"
属性,因为WKWebView不知道如何在新选项卡中打开链接。有关解决方法,请参见https://stackoverflow.com/a/25853806/810466。
检查链接是否为HTTPS或使用App Transport Security Settings
选项更新Allow Arbitrary Loads
请确保仅在将WKWebView添加到didMoveToParentViewController:
中的视图层次结构之后才启动加载请求,因为如果它试图在视图层次结构之外运行,它可能会使javascript失败
实施WKWebView NavigationDelegate方法,并确保在确定请求策略时返回WKNavigationActionPolicyAllow
答案 3 :(得分:0)
首先,您应该将其添加到您的代理中:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(WKNavigationActionPolicy.allow)
}
然后,如果链接具有target="_blank"
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
答案 4 :(得分:-1)
我仍然不知道真正的原因是什么,但是当我将文件的托管方式从Wix更改为S3时,我不再遇到问题了。