gpt4 book ai didi

javascript - 如何使用 stringByEvaluatingJavaScriptFromString 在 UIWebView 中显示 JavaScript 警报对话框,而不是在 Swift 中使用 performSelectorOnMainThread?

转载 作者:搜寻专家 更新时间:2023-11-01 07:33:41 25 4
gpt4 key购买 nike

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

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

这段代码是这样建议的:

UIWebView stringByEvaluatingJavaScriptFromString hangs on iOS5.0/5.1 when called using GCD

它表示 performSelectorOnMainThreadstringByEvaluatingJavaScriptFromString 一起工作。这会弹出一个警告对话框,可以通过单击“确定”按钮将其关闭。但是,dispatch_async 不起作用,对话框卡住并且无法按下 OK 按钮。

问题是:如何在Swift中实现dialog的上述功能?如何将代码转换成Swift?

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

如果我在 viewDidLoad 中直接调用下面的代码,设备会通过 LaunchScreen 暂停:

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

我试过 Alternative solutions performSelectorOnMainThread 但结果是卡住的 LaunchScreen 或卡住的警报对话框。

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

最佳答案

我通过加载网页并在 webViewDidFinishLoad 中调用 stringByEvaluatingJavaScriptFromString 解决了这个问题。

解决方法如下:

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()
}
}

关于javascript - 如何使用 stringByEvaluatingJavaScriptFromString 在 UIWebView 中显示 JavaScript 警报对话框,而不是在 Swift 中使用 performSelectorOnMainThread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31151915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com