alert()在WKWebview中不起作用evaluateJavaScript()

Kri*_*ofe 12 javascript ios wkwebview swift3

我不知道为什么我的问题被标记为重复这个问题,首先我用evaluateJavaScript执行javascript代码,因为问题标题显示它与那个问题明显不同.更重要的是,我已经注意到,在我的问题主体的最后,我在这个问题上尝试了答案而没有成功.

我使用wkwebview.evaluateJavaScript()funciton在swift3的wkwebview中执行javascript.但没有alert()打开警报对话框.并且没有错误和问题显示.虽然我可以evaluateJavaScript()用来执行javascript代码来修改页面内容.

class WebViewController: UIViewController, WKScriptMessageHandler, WKNavigationDelegate, WKUIDelegate, UIScrollViewDelegate {
    var wk:WKWebView!
    self.wk.navigationDelegate = self
    self.wk.uiDelegate = self
    self.wk.scrollView.delegate = self
    self.wk.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0"

    ...
    override func viewDidLoad() {
        super.viewDidLoad()
        ...
        let config = WKWebViewConfiguration()
        self.wk = WKWebView(frame: CGRect(x: frame.minX, y: frame.minY+20, width: frame.width, height: frame.height-70), configuration: config)
        self.wk.navigationDelegate = self
        ...
    }


    ...
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("Finished navigation to url \(String(describing: webView.url))")
        //self.wk.evaluateJavaScript("document.getElementById('test').innerHTML = 'sssssssssssssss';", completionHandler: nil)          //this works well
        self.wk.evaluateJavaScript("alert('aaaaaaa');", completionHandler: nil)     //this not show the alert dialog
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我也参考这篇文章回答,而那个问题不在evaluateJavaScript上.我WKUIDelegate为我WebViewController添加并添加self.wk.uiDelegate = self到我的viewDidLoad(),但没有任何变化.

添加,在console.log()下面将日志放入控制台,而alert()没有弹出对话框.UIAlertController也可以工作.

self.wk.evaluateJavaScript("alert('aa');console.log('1234');var rect = document.getElementById('liveMovie').getBoundingClientRect();[rect.left, rect.top];") {
    (result, error) -> Void in
    if((result) != nil)
    {
        self.player?.view?.frame.origin.x = (result as! Array)[0]
        self.player?.view?.frame.origin.y = (result as! Array)[1]
    }
}

let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in
     if(true)
     {
     }
}))
Run Code Online (Sandbox Code Playgroud)

Ona*_*ato 4

这个答案中有一个有效的例子。看来您可能没有正确实现 WKUIDelegate 方法。