如何在 Swift 的 WKWebView 中禁用用户选择?

Dan*_*dez 7 xcode webview ios swift wkwebview

我开发了一个应用程序,它在 Swift 中使用 WKWebView 显示一个网页。我需要禁用用户选择和标注(因为网络加载了一个图表)并且我没有找到任何方法来使用 WKWebView 来做到这一点。

这是我的代码:

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {

    @IBOutlet weak var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let url = URL(string: "https://danfg95glucose.azurewebsites.net")
        let request = URLRequest(url: url!)
        webView.navigationDelegate = self
        webView.load(request)

    }
}
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情,但在 Swift 中使用 WKWebView:

// Disable user selection
[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';"];
// Disable callout
[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"];
Run Code Online (Sandbox Code Playgroud)

是否可以?

这是显示问题的图像:

在此处输入图片说明

非常感谢您的回复。对不起,我的水平,我是新手,我正在学习编程。

Joe*_*uez 12

您正在寻找的是以编程方式将此css添加到您的 WKWebView 中。

首先,在您的视图控制器上,添加 WKWebView:

let webViewConfiguration = WKWebViewConfiguration()
let webView = WKWebView(frame: .zero, configuration: webViewConfiguration)
view.addSubview(webView)
webView.snp.updateConstraints { make in
    make.edges.equalTo(view)
}

webView.navigationDelegate = self
webView.load(URLRequest(url: URL(string: "https://www.google.com")!))
Run Code Online (Sandbox Code Playgroud)

然后,实现导航委托方法

optional public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
Run Code Online (Sandbox Code Playgroud)

并在其中添加以下内容:

extension ExampleViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        let javascriptStyle = "var css = '*{-webkit-touch-callout:none;-webkit-user-select:none}'; var head = document.head || document.getElementsByTagName('head')[0]; var style = document.createElement('style'); style.type = 'text/css'; style.appendChild(document.createTextNode(css)); head.appendChild(style);"
        webView.evaluateJavaScript(javascriptStyle, completionHandler: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,您将使用禁用标注的 css 以编程方式添加样式标记。

希望能帮助到你!

  • 这可行,但我的页面现在不会在文本字段中获得任何输入...... (2认同)