如何解决 UIWebView 中的“帧加载中断”错误?

Posted

技术标签:

【中文标题】如何解决 UIWebView 中的“帧加载中断”错误?【英文标题】:How to resolve "Frame Load Interrupted" error in UIWebView? 【发布时间】:2013-11-11 21:03:39 【问题描述】:

在我签约构建的应用程序中,我正在提取 YouTube 视频列表并允许它们显示在应用程序中。但是,当用户在 YouTube 视图的导航控制器中点击单元格并出现带有 UIWebView 的模态视图时,UIWebView 会返回错误“帧加载中断”。

我已经通过调试器运行了几十次,在我初始化 NSURLRequest 之前一切似乎都很顺利。当显示模态视图时,下面是在 ViewController 的-viewDidLoad 方法中运行的代码:

- (void)viewDidLoad

    [super viewDidLoad];
    _webView = [[UIWebView alloc] init];
    _webView.delegate = self;
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:_url];
    [_webView loadRequest:request];

但是,当我在[_webView loadRequest:request]; 行上调出调试器时,我看到以下内容:

有谁知道为什么 UIWebView 返回错误?

【问题讨论】:

您可能需要检查 UIWebView 委托的 didFailWithError 并检查域和错误号,看看是否会产生更多信息 这是一个空白页吗? 关于重定向到 m.youtube 的最后一个答案似乎很有希望。我还发现了这个:***.com/questions/19959307/…。如果文件是本地文件并且需要使用 UIWebView loadData 形成请求: @amarkon 我有一个发往服务器的 POST 请求,它以 PDF 数据进行响应。扩展名为 .pdf 的文件名以 application/x-www-form-urlencoded 格式作为参数发送。我也收到 Error Domain=WebKitErrorDomain Code=102 “Frame load interrupted” 错误。如何解决?请帮忙。 TIA 【参考方案1】:

您应该检查 URL 路径 应该是@"http://google.com" 而不是@“google.com”

【讨论】:

【参考方案2】:

我有同样的问题,在我的情况下,它原来是 MIMEType 设置不正确。

我通过使用来自 URL 的请求手动创建 NSURLConnection 进行测试,然后实现:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

观察来自连接的响应回调。响应的MIMEType 原来是"pdf/pdf" 而不是"application/pdf,",一旦我解决了这个问题,webview 就很好地加载了 url。

希望这会有所帮助。

【讨论】:

【参考方案3】:

您使用的网址可能无法识别用户代理。这也是旧 ios 版本中出现的问题,但似乎在 iOS 7 中又出现了。尝试将其添加到您的 appdelegate didFinishLaunchingWithOptions:

NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (Khtml, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3", @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

【讨论】:

不走运,仍然收到“帧加载中断”消息。 这解决了我在尝试加载 Facebook 时遇到的问题。对我来说,必要的部分是Mozilla/5.0 AppleWebKit/534.46【参考方案4】:

使用https://www.google.com 或http://www.google.com

其实https://是关键字。

【讨论】:

【参考方案5】:

我在 iOS 10.2.1 UIWebView 上遇到了同样的问题。

当请求带有路径 URL 的 pdf 文件时

pdf 文件的 MIMEType 为“application/x-pdf”。

所以我改成了“application/pdf”并且可以阅读这个

【讨论】:

【参考方案6】:

Swift 5/WKWebview

WKWEBVIEW 也会出现同样的问题,应该提供类似的解决方案作为 UIWebview: 就我而言,它是 PDF -

webView.load(Data.init(contentsOf: url), mimeType:"application/pdf", characterEncodingName: "UTF-8", baseURL: url)

这应该用于从网络加载 PDF 文件。

【讨论】:

【参考方案7】:

显示帧加载中断错误的原因是www.youtube.com 正在执行重定向到m.youtube.com,这是UIWebView 不喜欢的。疯狂地推测,我会引用可能的安全隐患?我能够通过直接链接到移动网站来解决此问题,无需 youtube 进行重定向。

【讨论】:

【参考方案8】:

对于那些报告添加或更正 mime 类型解决了问题的人,我遇到了类似的问题。就我而言,我试图打开一个没有文件扩展名的本地文件(例如“my-dir/my-file”),这导致了可怕的"Frame Load Interrupted" 错误(以及"Unbalanced calls to begin/end appearance transitions for UIViewController")。添加文件扩展名(例如“my-dir/my-file.pdf”)为我解决了问题。

【讨论】:

【参考方案9】:

如果 webView 已经在加载过程中,请不要加载 webView

if !self.webView.isLoading 
    let request = URLRequest.init(url: url)
    self.webView.load(request)

这样,我解决了这个问题。

【讨论】:

【参考方案10】:

很清楚..您没有设置 WebView 的“框架”。 使用这个:

_webView = [[UIWebView alloc] initWithFrame:self.view.frame]; //give a proper Rect value
_webView.delegate = self;
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:_url];
[_webView loadRequest:request];

【讨论】:

不是那个意思。它是在谈论 web 框架(一个 WebKit 概念),而不是 UIView 框架。

以上是关于如何解决 UIWebView 中的“帧加载中断”错误?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9.2.1 获取 webView:didFailLoadWithError - 102:Phonegap 中的帧加载中断

iPhone 上的 Phonegap 应用程序触发“帧加载中断”错误

如果 App 因在代码中使用 UIWebView 而被拒绝,如何解决?

如何更改 UIWebView 中的字符编码?

如何在 ios 中获取 UIWebview 中的内容

如何将照片存储中的图像添加到 UIWebview