(WKWebView)長押しインタラクション禁止

2363 ワード

WKWebViewを使用してhtml記事を表示し、loadFileURLでhtmlファイルをロードし、ローカルキャッシュ画像をロードします.写真を长く押すと窓が弾けます.文字を长く押すと窓が弾けます.リンクをクリックしてジャンプします..
  • 1.長押しインタラクション禁止
  • let configuration = WKWebViewConfiguration()
    configuration.preferences = WKPreferences()
    configuration.preferences.minimumFontSize = 12
    configuration.preferences.javaScriptEnabled = true
    configuration.preferences.javaScriptCanOpenWindowsAutomatically = false
    
    // "document.documentElement.style.webkitTouchCallout='none';" //     
    // "document.documentElement.style.webkitUserSelect='none';" //     
    let javascript = "document.documentElement.style.webkitTouchCallout='none';document.documentElement.style.webkitUserSelect='none';"
    let noneSelectScript = WKUserScript(source: javascript, injectionTime: WKUserScriptInjectionTime.atDocumentEnd, forMainFrameOnly: true)
    
    let v = WKWebView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: contentHeight), configuration: configuration)
    v.configuration.userContentController.addUserScript(noneSelectScript)
    

    もちろんそうでもいい
    webView.evaluateJavaScript("document.documentElement.style.webkitTouchCallout='none';", completionHandler: nil)
    webView.evaluateJavaScript("document.documentElement.style.webkitUserSelect='none';", completionHandler: nil)
    

    それでもいい
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
         print("    ")
    
         //     /  
         webView.evaluateJavaScript("document.documentElement.style.webkitTouchCallout='none';", completionHandler: nil)
         webView.evaluateJavaScript("document.documentElement.style.webkitUserSelect='none';", completionHandler: nil)
    }
    
  • 2.リンクジャンプ禁止
  • func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
         DLog("navigationAction = %@, request = %@", navigationAction, navigationAction.request.url ?? "url = nil")
    
         //       
         if navigationAction.request.url?.scheme?.contains("http") == true {
            decisionHandler(WKNavigationActionPolicy.cancel)
         } else {
            decisionHandler(WKNavigationActionPolicy.allow)
         }
    }