无法使用 WKWebView 在 Safari 中打开外部链接
Posted
技术标签:
【中文标题】无法使用 WKWebView 在 Safari 中打开外部链接【英文标题】:Unable to open external link in safari using WKWebView 【发布时间】:2020-03-30 05:23:22 【问题描述】:我正在从 UIWebView
迁移到 WKWebView
。需要在WKWebView
中加载 html 内容,一切正常,但问题是在单击来自WKWebView
的任何链接后,无法在外部 safari 浏览器中打开链接。我用下面的代码
类
class CTFSPolicyAndTermsViewController: UIViewController, WKUIDelegate, WKNavigationDelegate
出口和WKWebView
变量
@IBOutlet weak var webViewContainer: UIView!
var webView: WKWebView!
viewDidLoad
方法
override func viewDidLoad()
super.viewDidLoad()
webView = WKWebView()
self.webView.uiDelegate = self
self.webView.navigationDelegate = self
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.translatesAutoresizingMaskIntoConstraints = false
webViewContainer.addSubview(webView)
[webView.topAnchor.constraint(equalTo: webViewContainer.topAnchor),
webView.bottomAnchor.constraint(equalTo: webViewContainer.bottomAnchor),
webView.leftAnchor.constraint(equalTo: webViewContainer.leftAnchor),
webView.rightAnchor.constraint(equalTo: webViewContainer.rightAnchor)].forEach
anchor in
anchor.isActive = true
用于加载 HTML 内容
if(self.isTermsMode)
let path:String = Bundle.main.path(forResource: "abc", ofType: "html")!
let text = try? String(contentsOfFile: path, encoding: String.Encoding.utf8)
webView!.loadHTMLString(text!, baseURL: nil)
决定政策
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
if let url = navigationAction.request.url
print(url)
UIApplication.shared.open(url)
decisionHandler(.cancel)
else
decisionHandler(.allow)
decidePolicyFor
方法应该调用但它没有执行我找不到问题
【问题讨论】:
你确定 HTML 没问题吗?decidePolicyFor
不能点击进入?
是的,我把断点放在了decisionPolicyFor
我的建议是尝试加载另一个页面(例如 google.com)来调试是委托方法还是 HTML 的问题。
你试过了吗?
@Andrew 一切都很好,只是位置不对,现在工作正常......
【参考方案1】:
我错过了订单
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.translatesAutoresizingMaskIntoConstraints = false
webViewContainer.addSubview(webView)
[webView.topAnchor.constraint(equalTo: webViewContainer.topAnchor),
webView.bottomAnchor.constraint(equalTo: webViewContainer.bottomAnchor),
webView.leftAnchor.constraint(equalTo: webViewContainer.leftAnchor),
webView.rightAnchor.constraint(equalTo:
webViewContainer.rightAnchor)].forEach anchor in
anchor.isActive = true
self.webView.uiDelegate = self
self.webView.navigationDelegate = self
【讨论】:
以上是关于无法使用 WKWebView 在 Safari 中打开外部链接的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 safari 的网络检查器在 WKWebView 中调试用户 javascript