OSX上的Swift:WebView stringByEvaluatingJavaScriptFromString不';行不通
这是我在这里的第一个问题,多年来,作为一名网络开发人员,我一直在尝试使用Xcode和Swift(最新版本)编写OSX应用程序 我试图做的是在我用Webkit/WebView加载的网页上执行JavaScript。 我尝试了很多方法(互联网上有很多答案——大部分是针对iOS的),但OSX+Swift+WebView(不是UIWebview或WkWebView)的答案却很少 我的最新方法是ViewController.swift:OSX上的Swift:WebView stringByEvaluatingJavaScriptFromString不';行不通,javascript,xcode,swift,macos,webview,Javascript,Xcode,Swift,Macos,Webview,这是我在这里的第一个问题,多年来,作为一名网络开发人员,我一直在尝试使用Xcode和Swift(最新版本)编写OSX应用程序 我试图做的是在我用Webkit/WebView加载的网页上执行JavaScript。 我尝试了很多方法(互联网上有很多答案——大部分是针对iOS的),但OSX+Swift+WebView(不是UIWebview或WkWebView)的答案却很少 我的最新方法是ViewController.swift: import Cocoa import WebKit class V
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警报和html文档的返回都不起作用
PS:“webViewDidFinishLoad”和“webViewDidStartLoad”似乎都没有执行
我真的很感激任何帮助。我想我几乎已经在整个网络上搜索了所有的提示——但没有任何东西对我有用
提前谢谢你
最好的
Alex关于myWebView.WindowsScriptObject.evaluateWebScript(“警报('test');");,您还应该执行此操作
webView(u0;:runJavaScriptAlertPanelWithMessage:initiatedBy:)
,然后您可以打印消息,您将获得警报消息。如果您想弹出警报框,您需要自己执行。关于myWebView.WindowsScriptObject.evaluateWebScript(“警报('test');”;
,您还应该执行此操作webView(u:runJavaScriptAlertPanelWithMessage:initiatedBy:)
,然后您可以打印消息,您将获得警报消息。如果您想弹出警报框,您需要自己执行此操作。Swift 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
}
}
})
Swift 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
}
}
})
这不是iOS WebFrameLoadDelegate没有方法webViewDidFinishLoad和/或WebViewDidStartLoad如果要监视网页加载,可以使用func webView(发件人:webView!,didFinishLoadForFrame:WebFrame!){print(“didFinishLoadForFrame”)}
您完全正确,谢谢。我尝试使用stringByEvaluatingJavaScriptFromString”方法,但结果相同:没有错误,但没有任何效果。你有什么想法吗?嘿,Leo!我尝试了myWebView.WindowsScript对象.evaluateWebScript(“警报('test');”)
,但与往常一样:完全没有JS警报。你是想这样使用它吗?最好!这不是iOS WebFrameLoadDelegate没有方法webViewDidFinishLoad和/或WebViewDidStartLoad如果你想监视网页加载,你可以使用func webView(发件人:webView!,didFinishLoadForFrame:WebFrame!){print(“didFinishLoadForFrame”)}
你完全正确,谢谢。我尝试在这里使用“stringByEvaluatingJavaScriptFromString”方法,但结果相同:没有错误,但没有任何效果。你有什么想法吗?嘿,Leo!我尝试了myWebView.WindowsScript对象.evaluateWebScript(“警报('test');)
,但和往常一样:根本没有JS警报。你是想这样使用它吗?最好!