ich, warum meine Frage nicht als Duplikat this one markiert ist, ich Javascript-Code mit evaluateJavaScript wie die Frage Titel zeigt zunächst auszuführen, die sich aus dieser quesiton offenbar anders. Außerdem habe ich festgestellt, dass ich die Antwort in dieser Frage ohne Erfolg am Ende meines Fragenkörpers versucht habe.alert() funktioniert nicht in WKWebview evaluateJavaScript()
Ich benutze wkwebview.evaluateJavaScript()
funciton, um Javascript in der wkwebview von swift3 auszuführen. Aber die alert()
hat den Alarmdialog nicht geöffnet. Und es gibt keine Fehler und Probleme zeigt. Während ich evaluateJavaScript()
verwenden kann, um JavaScript-Code auszuführen, um den Seiteninhalt zu ändern.
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
}
...
}
Ich beziehe mich auch dieses zu post und answer, während diese Frage nicht auf evaluateJavaScript ist. Ich füge WKUIDelegate
für meine WebViewController
hinzu und füge self.wk.uiDelegate = self
meiner viewDidLoad()
hinzu, aber nichts ändert sich.
hinzugefügt, unter der console.log() legte das Protokoll in der Konsole, während alert() nicht das Dialogfeld öffnen. Und der UIAlertController funktioniert auch.
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)
{
}
}))
Sie haben keinen Hinweis auf die 'runJavaScriptAlertPanelWithMessage' Delegatmethode. Kann dieser Code zu Ihrer Frage hinzugefügt werden? – Onato
Ich habe diese Methode nicht in meinem Code verwendet. Der 'UIAlertController' kann in meinem Code arbeiten, aber' evaluateJavaScript' kann nicht 'alert() ' –
Deshalb funktioniert es dann nicht. Diese Methode wird aufgerufen, wenn JavaScript ausgelöst wird und 'alert()'. Es liegt dann an Ihnen bei dieser Methode zu entscheiden, was Sie dagegen tun sollen. Siehe das Beispiel in der Antwort, die unten verlinkt ist. – Onato