gpt4 book ai didi

swift - WKWebview:如何防止 Laravel Page 链接在 safari 中打开?

转载 作者:行者123 更新时间:2023-11-28 07:21:35 25 4
gpt4 key购买 nike

我是 swift 新手。

我构建了一个 Web 应用程序,并使用 WKWebView 将其作为 iOS 应用程序提供(这仅供公司内部使用)。

在 web 应用程序中,我使用了 laravel 分页,这在浏览器和 android webview 上工作正常。

在 iOS 上发生的情况是,当我单击 WKWebView 内的页码链接时,该链接会在 safari 中打开。我想要做的是在同一个 Webview 上打开它。

这是我在 ViewController.swift 中的代码

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {
var webView : WKWebView!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.


let url = URL(string: "https://domain-online.asia")!
let urlRequest = URLRequest(url: url)
webView.load(urlRequest)

let refresh = UIBarButtonItem(barButtonSystemItem: .refresh, target: webView, action: #selector(webView.reload))
toolbarItems = [refresh]
navigationController?.isToolbarHidden = false

}

override func loadView() {
let source: String = "var meta = document.createElement('meta');" +
"meta.name = 'viewport';" +
"meta.content = 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no';" +
"var head = document.getElementsByTagName('head')[0];" + "head.appendChild(meta);";

let script: WKUserScript = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
let userContentController: WKUserContentController = WKUserContentController()
let conf = WKWebViewConfiguration()
conf.userContentController = userContentController
userContentController.addUserScript(script)
webView = WKWebView(frame: CGRect.zero, configuration: conf)
webView.navigationDelegate = self
view = webView
}

func webView(webView: WKWebView!, createWebViewWithConfiguration configuration: WKWebViewConfiguration!, forNavigationAction navigationAction: WKNavigationAction!, windowFeatures: WKWindowFeatures!) -> WKWebView! {
if navigationAction.targetFrame == nil {
webView.load(navigationAction.request)
}
return nil
}}

最佳答案

实现decidePolicyFor并设置policy如下,

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard navigationAction.navigationType == .linkActivated,
let url = navigationAction.request.url,
url.host?.contains("domain-online.asia") == false,
UIApplication.shared.canOpenURL(url) else {
decisionHandler(.allow)
return
}
UIApplication.shared.open(url)
decisionHandler(.cancel)
}

关于swift - WKWebview:如何防止 Laravel Page 链接在 safari 中打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57879419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com