1

在 Objective-C 中,以下代码适用于viewDidLoad

[self.myWebView performSelectorOnMainThread:
@selector(stringByEvaluatingJavaScriptFromString:)
withObject:@"alert('Test')" waitUntilDone:NO];

此代码建议如下:

使用 GCD 调用 UIWebView stringByEvaluatingJavaScriptFromString 在 iOS5.0/5.1 上挂起

它说performSelectorOnMainThread适用于stringByEvaluatingJavaScriptFromString. 这会弹出一个警告对话框,可以通过单击“确定”按钮将其关闭。但是,dispatch_async不起作用,对话框冻结,无法按下 OK 按钮。

问题是:如何使上述对话框的功能在 Swift 中工作?如何将代码转换为 Swift?

问题是performSelectorOnMainThread在 Objective-C 中使用的在 Swift 中不可用。

如果我直接在 中调用下面的代码viewDidLoad,设备会被 LaunchScreen 挂起:

override func viewDidLoad() {
    super.viewDidLoad()
    myWebView.stringByEvaluatingJavaScriptFromString("alert('test')");

我已经尝试了替代解决方案performSelectorOnMainThread但结果是冻结的 LaunchScreen 或冻结的警报对话框。

有人可以告诉我如何调用stringByEvaluatingJavaScriptFromString以在 Swift 中显示 JavaScript 警报对话框吗?谢谢你。

4

1 回答 1

2

我已经通过加载网页并调用stringByEvaluatingJavaScriptFromString.webViewDidFinishLoad

解决方案如下:

import UIKit

class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var myWebView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        var myPath = NSBundle.mainBundle().pathForResource("index", ofType: "html")
        myWebView.delegate = self
        myWebView.loadRequest(NSURLRequest(URL: NSURL(string: myPath!)!))
    }

    func webViewDidFinishLoad(webView: UIWebView) {
        myWebView.stringByEvaluatingJavaScriptFromString("alert('Hello')")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
于 2015-07-01T13:31:48.780 回答