这是我多年来作为网络开发人员尝试使用Xcode和Swift(最新)编写OSX应用程序的第一个问题。
我尝试做的是在网页上执行JavaScript,我正在加载Webkit / WebView。 我尝试了很多方法(互联网上有很多答案 - 主要是针对iOS)但是对于OSX + Swift + WebView(不是UIWebview或WkWebView)来说很少。
我的最新方法是ViewController.swift:
import Cocoa
import WebKit
class ViewController: NSViewController, WebFrameLoadDelegate {
var myWebView:WebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
myWebView = WebView(frame: self.view.frame)
myWebView.frameLoadDelegate = self
//Load URL
let url = NSURL(string: "http://google.com");
let request = NSURLRequest(URL: url!);
myWebView.mainFrame.loadRequest(request)
self.view.addSubview(myWebView)
//Insert JS
myWebView.stringByEvaluatingJavaScriptFromString("alert('test');");
let script = "document";
if let returnedString = myWebView.stringByEvaluatingJavaScriptFromString(script) {
print("the result is \(returnedString)");
}
}
/*
* Page ready
*/
func webViewDidFinishLoad(myWebView : WebView) {
print("WvFinished")
}
func webViewDidStartLoad(myWebView : WebView) {
print("WvStarted")
}
}
JS-Alert和html文档的返回都不起作用。
PS:" webViewDidFinishLoad"也不是" webViewDidStartLoad"似乎已被执行。
我真的很感激任何帮助。我想我几乎在整个网络上搜索了所有提示 - 但没有任何方法可以帮助我。
提前谢谢!
最好,
亚历
答案 0 :(得分:0)
关于myWebView.windowScriptObject.evaluateWebScript("alert('test');");
,您还应执行此操作webView(_:runJavaScriptAlertPanelWithMessage:initiatedBy:)
,然后您可以打印message
,您将收到提醒信息。如果你想弹出警告框,你需要自己动手。
答案 1 :(得分:0)
快捷键4
WebView
已过时。请改用WebKit
。
import WebKit
//---
let webConfiguration = WKWebViewConfiguration()
let preferences = WKPreferences()
preferences.javaScriptEnabled = true
webConfiguration.preferences = preferences
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.translatesAutoresizingMaskIntoConstraints = false
self.webView.evaluateJavaScript("document.getElementById('name').value='\(self.nameTextField.text)';", completionHandler:{ [weak self] _, error in
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
if error != nil {
// Do something
return
}
}
})