gpt4 book ai didi

objective-c - 如何同步运行WebView.mainFrame.loadRequest?

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

在我的应用程序中,我尝试使用 WebView(不可见)导航到给定的 URL。但是,加载 Web 内容是异步发生的。对于以后的处理,我需要它来等待所有 Web 内容加载(包括重定向)。

我尝试使用 CFRunLoopRunInMode 让它等待(或超时),但无法让它在可用的循环模式下正常工作。使用 kCFRunLoopDefaultMode 时,不会进行重定向,加载请求会在第一个地址处停止。 kCFRunLoopCommonModes 模式甚至在加载请求后崩溃(swift 代码,所以我没有任何有用的错误信息)。

我已经将我的类注册为帧加载委托(delegate),所以我知道什么时候加载了所有内容(即使在多次重定向之后)。我只需要在运行循环处于事件状态时让它工作(没有它也能很好地工作)。代码:

  override func webView(sender: WebView!, didStartProvisionalLoadForFrame frame: WebFrame!) {
jsLogger.logInfo("==> Start loading");
}

override func webView(sender: WebView!, willPerformClientRedirectToURL URL: NSURL!,
delay seconds: NSTimeInterval, fireDate date: NSDate!, forFrame frame: WebFrame!) {
redirecting = true;
}

override func webView(sender: WebView!, didCreateJavaScriptContext context: JSContext, forFrame: WebFrame!) {
jsLogger.logInfo("==> JS create");
}

override func webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!) {
if redirecting {
redirecting = false;
return;
}

jsLogger.logInfo("==> Navigating to: " + sender.mainFrameURL);
}

override func webView(sender: WebView!, didFailLoadWithError error: NSError!, forFrame frame: WebFrame!) {
jsLogger.logError("Navigating to webpage failed with error \(error.localizedDescription)")
}

这里是使用 runloop 加载 URL 的代码:

  func navigateAndWait(location: String) -> String {
if let url = NSURL(string: location) {
redirecting = false;
webClient.mainFrame.loadRequest(NSURLRequest(URL: url));

let result: Int = Int(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, Boolean(0)));
switch result {
case kCFRunLoopRunFinished:
return "Invalid run loop";

case kCFRunLoopRunTimedOut:
return "Call timed out";

case kCFRunLoopRunStopped:
fallthrough;

default: // Everything ok.
return "";
}
}
return "Invalid URL";

}

还有哪些其他方法可以让我的线程等待加载请求完成?

注意:Obj-C 和 Swift 都可以给出一个解决方案。

最佳答案

您可以在 webViewDidFinishLoad:didFailLoadWithError: 中使用 performSelector:onThread: 在 webview 完成加载时执行您想要的任何任务。

关于objective-c - 如何同步运行WebView.mainFrame.loadRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30166585/

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