繁体   English   中英

在OSX上快速运行:WebView stringByEvaluatingJavaScriptFromString不起作用

[英]Swift on OSX: WebView stringByEvaluatingJavaScriptFromString doesn't work

这是我多年以来作为Web开发人员尝试使用Xcode和Swift(最新)编写OSX App的问题。

我想做的是在要用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
        }
    }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM