OSX上的Swift:WebView stringByEvaluatingJavaScriptFromString不';行不通

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

这是我在这里的第一个问题,多年来,作为一名网络开发人员,我一直在尝试使用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警报和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警报。你是想这样使用它吗?最好!