現在、WKWebviewを使ってwebviewアプリを開発しております。
そこで、表題のようにinput type="file"でファイルを選択した後に、なぜかリロード処理が走ってしまい困ってしまっております。
今まで、このような事に遭遇した事がなかったので、解決方法をご存知の方がいらっしゃいましたら、ご教授頂けませんでしょうか。
同じような事象がこちらで議論されているようだったのですが、解決もされていないようで。。
HTMLは、下記のような単純なページで再現されております。
<!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta charset="UTF-8"> <title>Document</title> </head> <body> <hr> <p><input type="text" /></p> <p><input type="file" /></p> </body> </html>
swift側は下記のコードです。
import UIKit import WebKit class RootViewController: UIViewController { // MARK: - Class variables lazy var webView: WKWebView = WKWebView() // MARK: - IBOutlet references @IBOutlet weak var contentView: UIView! // MARK: - LifeCycle override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. setupWebView() } override func viewDidAppear(_ animated: Bool) { loadRequest(withUrl: "https://example.id/") } func loadRequest(withUrl urlString: String) { if let urlLogin = URL(string: urlString) { var urlRequest = URLRequest(url: urlLogin) webView.load(urlRequest) } } // MARK: - setupWebView func setupWebView() { let configuration = WKWebViewConfiguration() configuration.processPool = WKProcessPool() configuration.websiteDataStore = WKWebsiteDataStore.default() configuration.preferences.javaScriptEnabled = true webView = WKWebView(frame: CGRect.zero, configuration: configuration) webView.scrollView.showsVerticalScrollIndicator = false webView.scrollView.showsHorizontalScrollIndicator = false webView.uiDelegate = self webView.navigationDelegate = self webView.scrollView.contentInsetAdjustmentBehavior = .never webView.scrollView.bounces = false contentView.addSubview(webView) // webViewの制約設定時、AutoresizingMaskによって自動生成される制約と競合するため、自動生成をやめる webView.translatesAutoresizingMaskIntoConstraints = false // webViewの制約 NSLayoutConstraint.activate([webView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), webView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), webView.topAnchor.constraint(equalTo: self.view.topAnchor), webView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor)]) } } extension RootViewController: WKUIDelegate, WKNavigationDelegate { func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { print("didFinish:(webView.url?.absoluteString)") } func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { print("decidePolicyFor=(webView.url?.absoluteString)") print("navigationType=(navigationAction.navigationType.rawValue)) // if navigationAction.navigationType == .other { // decisionHandler(.cancel) // return // } decisionHandler(.allow) } }
ファイル選択後に、なぜか下記のように decidePolicyFor navigationAction: WKNavigationAction
が動いてしまって、リロードが走っているようなのです。
その時のprint
の結果が下記になります。
decidePolicyFor=Optional("https://example.com") navigationType=-1 didFinish:Optional("https://example.com")
開発環境
xcode: 11.5
swift: 5
何卒、よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。