【问题标题】:Swift Webview page will not open links within the pageSwift Webview 页面不会打开页面内的链接
【发布时间】:2021-08-27 00:13:27
【问题描述】:

我有一个应用程序,它有一个 webview 选项卡。在我使用的特定网站上,它不会打开链接。在 safari 或其他浏览器上时,所有链接都会自动打开一个新选项卡。我想让用户保持在同一个 webview 中。我怎样才能做到这一点?下面是我的代码。我可以使用 React Native 和 Flutter 做到这一点,但无法迅速解决。请帮忙。

class ExampleSecondViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
override func viewDidLoad() {
   super.viewDidLoad()
   let myURL = URL(string:"https://travelsecrets.live")
   let myRequest = URLRequest(url: myURL!)
   webView.load(myRequest)
   webView.allowsBackForwardNavigationGestures = true
   webView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress),
       options: .new, context: nil)

 

       webView.configuration.preferences.javaScriptEnabled = true
}
 
 override func loadView() {
   let webConfiguration = WKWebViewConfiguration()
   webView = WKWebView(frame: .zero, configuration: webConfiguration)
   webView.uiDelegate = self
   view = webView
  }

 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: 
  [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "estimatedProgress" {
        print(Float(webView.estimatedProgress))
     }
  }
  }

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    你需要为你的 webView 实现 navigationDelegate:

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        // this delegate
        webView.navigationDelegate = self
        view = webView
    }
    

    并使用这个方法:

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
     if navigationAction.navigationType == WKNavigationType.linkActivated {
        webView.load(navigationAction.request)
        decisionHandler(.cancel)
        return
     }
     decisionHandler(.allow)
    }
    

    基于此线程:https://stackoverflow.com/a/51660446/10492380

    【讨论】:

    • 谢谢。我添加了该代码,但我仍然有同样的问题。有什么想法吗?
    • 您忘记在您的视图上分配导航委托,我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2011-07-29
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多