Swift on OSX: WebView stringByEvaluatingJavaScriptFromString
Swift on OSX: WebView stringByEvaluatingJavaScriptFromString doesn't work
这是我在这里
的第一个问题,因为我多年来一直试图使用Xcode和Swift(最新)编写OSX应用程序。
我正在尝试做的是在我用Webkit/WebView加载的网页上执行JavaScript。我尝试了很多方法(互联网上充满了答案 - 主要是针对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"。
我真的很感激任何帮助。我想我几乎已经在整个网络上搜索了所有提示 - 但没有任何效果。
提前谢谢你!
最好
亚历克斯
关于myWebView.windowScriptObject.evaluateWebScript("alert('test');");
,你也应该这样做webView(_:runJavaScriptAlertPanelWithMessage:initiatedBy:)
,然后你可以打印message
,你会得到警报的消息。如果你想弹出一个警报框,你需要自己做。
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
}
}
})
相关文章:
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- window.onload没有'无法在Android WebView中工作
- Android Webview通过Javascript注入CSS
- Android在webview中加载带有javascript的html文件,得到Uncaught ReferenceEr
- 在Android WebView中通过javascript检测点击HTML选项标记
- 用JavaScript替换Android WebView模板上的html文本
- Hammer.js阻止在Android Webview中点击超链接
- 在android中显示固定高度的webview内的大型内容
- Javascript inject CSS into Swift WebView
- 在webView上加载本地存储的文件时延迟
- WebView返回错误的window.innerHeight
- 如何使用webview在React Native中使用Highcharts
- 在Android WebView中运行Javascript-onPageFinished循环
- Chrome 50的Android WebView在触摸页面之前会阻止Javascript
- 在Android的Webview中添加Javascript
- HTML5画布支持和Android Webview
- 带有javascript的HTML没有加载到android webview中
- 在WebView iOS中评估Javascript
- 带有iframe嵌入的Android WebView;t显示在4.2.2及以下
- 如果没有互联网连接,Android WebView离线消息