I don't why my question is marked as duplicate of this one, first I execute javascript code with evaluateJavaScript as the question title shows which it's apparently different from that quesiton. What's more I've noted that I've try the answer in that question without no success at the end of my question body.
I use wkwebview.evaluateJavaScript()
funciton to execute javascript in the wkwebview of swift3. But the alert()
didnot open the alert dialog. And there is no errors and issues shows. While I can use evaluateJavaScript()
to execute javascript code to modify the page content.
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
}
...
}
I also refer to this post and answer, while that question is not on evaluateJavaScript. I add WKUIDelegate
for my WebViewController
and add self.wk.uiDelegate = self
to my viewDidLoad()
, but nothing changes.
added, below the console.log() put the log in the console, while alert() not pop up the dialog. And the UIAlertController also works.
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)
{
}
}))
There is a working example in this answer. It seems you mightn't have implemented the WKUIDelegate method correctly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With