मैं क्यों मेरे सवाल this one की डुप्लीकेट के रूप में चिह्नित किया गया है, पहले मैं जावास्क्रिप्ट कोड evaluateJavaScript साथ सवाल शीर्षक से पता चलता है जो यह है कि quesiton से जाहिरा तौर पर अलग है के रूप में निष्पादित नहीं में काम नहीं कर। मैंने और क्या देखा है कि मैंने अपने प्रश्न निकाय के अंत में बिना किसी सफलता के उस प्रश्न में उत्तर देने का प्रयास किया है।चेतावनी() WKWebview evaluateJavaScript()
मैं स्विफ्ट 3 के wkwebview में जावास्क्रिप्ट निष्पादित करने के लिए wkwebview.evaluateJavaScript()
funciton का उपयोग करता हूं। लेकिन alert()
ने चेतावनी संवाद नहीं खोल दिया। और कोई त्रुटि नहीं है और समस्याएं दिखाती हैं। जबकि मैं पृष्ठ सामग्री को संशोधित करने के लिए जावास्क्रिप्ट कोड निष्पादित करने के लिए evaluateJavaScript()
का उपयोग कर सकता हूं।
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
}
...
}
मैं भी इस post और answer का उल्लेख करते हुए कहा कि सवाल evaluateJavaScript पर नहीं है। मैं अपने WebViewController
के लिए WKUIDelegate
जोड़ता हूं और self.wk.uiDelegate = self
को अपने viewDidLoad()
पर जोड़ता हूं, लेकिन कुछ भी नहीं बदलता है।
जोड़ा गया, console.log() के नीचे लॉग को कंसोल में डाल दिया गया, जबकि अलर्ट() संवाद को पॉप अप नहीं करता है। और 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)
{
}
}))
आप 'runJavaScriptAlertPanelWithMessage' प्रतिनिधि विधि का कोई जिक्र नहीं किया है। क्या वह कोड आपके प्रश्न में जोड़ सकता है? – Onato
मैंने अपने कोड में उस विधि का उपयोग नहीं किया था। 'UIAlertController' मेरे कोड में काम कर सकता है, लेकिन 'मूल्यांकन जावास्क्रिप्ट' चेतावनी नहीं दे सकता()' –
यही कारण है कि यह तब काम नहीं करता है। जब जावास्क्रिप्ट आग और 'चेतावनी()' इस विधि को बुलाया जाता है। इस विधि में यह तय करने के लिए कि आप इसके बारे में क्या करना है, यह आपके ऊपर है। नीचे दिए गए उत्तर में उदाहरण देखें। – Onato