iphone - UIWebView 加载 html5-Video EXC_BAD_ACCESS 崩溃

标签 iphone objective-c uiwebview exc-bad-access html5-video

在我们的 iPad 应用程序中,我们使用 UIWebView 从一个域加载不同的站点,其中一些站点使用 hml5-Video。 没有视频的网站可以完美加载。但是当我加载一个包含 htmlt5-video 的网站时,有时我的应用程序 在带有 EXC_BAD_ACCESS 的 UIWebView 的加载过程中崩溃,有时它不会。每当发生此类崩溃时,它似乎都发生在将视频播放器添加到站点的位置。

我确实从 Apple 下载了 UICatalog-Example,只是将 WebViewController-Class 中的默认 URL 更改为包含 html5-video 的站点的 URL。相同的结果......有时崩溃有时没有崩溃。

我还在 Xcode 上创建了一个新项目(基于 View 的应用程序 - 适用于 iPad),并且只向新项目 ViewController 添加了一个 UIWebView。再次...加载包含 html5-video 的网站有时会导致崩溃,有时不会。

来自“新项目”VIEWCONTROLLER 的代码(实现):

- (void)viewDidLoad {
    [super viewDidLoad];

    self.myWebView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 768, 1004)] autorelease];
    self.myWebView.backgroundColor = [UIColor whiteColor];
    self.myWebView.scalesPageToFit = YES;
    self.myWebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
    self.myWebView.delegate = self;
    [self.view addSubview: self.myWebView];

    [self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.gelbeseiten.de/129103114849"]]];

    //More Sites with HTML5-Videos ...
    //[self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.gelbeseiten.de/129103746403"]]];
    //[self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.gelbeseiten.de/129105233646"]]];
}

- (void)viewDidUnload {
    [super viewDidUnload];

    self.myWebView = nil;
}

- (void)viewWillDisappear:(BOOL)animated {
    [self.myWebView stopLoading];
}

- (void)dealloc {
    myWebView.delegate = nil;
    [myWebView release];

    [super dealloc];
}

来自“新项目”VIEWCONTROLLER(标题)的代码:

@interface WebViewTestViewController : UIViewController <UIWebViewDelegate> {
    UIWebView *myWebView;
}

@property (nonatomic, retain) UIWebView *myWebView;

设备日志:

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000098
Crashed Thread:  0

Thread 0 Crashed:
0   WebCore                         0x34c7d09e WebCore::RenderLayer::clippingRoot() const + 110
1   WebCore                         0x34c7cf2a WebCore::RenderLayer::childrenClipRect() const + 26
2   WebCore                         0x34c7ce0c WebCore::RenderWidget::setWidgetGeometry(WebCore::IntRect const&) + 40
3   WebCore                         0x34c5e0f8 WebCore::RenderWidget::updateWidgetPosition() + 320
4   WebCore                         0x34ba0170 WebCore::RenderView::updateWidgetPositions() + 144
5   WebCore                         0x34b97d16 WebCore::FrameView::performPostLayoutTasks() + 202
6   WebCore                         0x34b8a6c0 WebCore::FrameView::layout(bool) + 2116
7   WebCore                         0x34bc5244 WebCore::FrameView::forceLayout(bool) + 4
8   WebKit                          0x302c0c24 -[WebHTMLView layoutToMinimumPageWidth:height:maximumPageWidth:adjustingViewSize:] + 136
9   WebKit                          0x302c0b8e -[WebHTMLView layout] + 18
10  WebKit                          0x302c26f2 -[WebHTMLView(WebInternal) _layoutIfNeeded] + 50
11  WebKit                          0x302c2622 -[WebHTMLView(WebInternal) _web_layoutIfNeededRecursive] + 14
12  WebKit                          0x302c251e -[WebHTMLView(WebPrivate) viewWillDraw] + 50
13  CoreFoundation                  0x3581dfc0 -[NSObject(NSObject) performSelector:] + 12
14  CoreFoundation                  0x35826d4a -[NSArray makeObjectsPerformSelector:] + 382
15  WebCore                         0x34bb000c -[WAKView viewWillDraw] + 24
16  CoreFoundation                  0x3581dfc0 -[NSObject(NSObject) performSelector:] + 12
17  CoreFoundation                  0x35826d4a -[NSArray makeObjectsPerformSelector:] + 382
18  WebCore                         0x34bb000c -[WAKView viewWillDraw] + 24
19  CoreFoundation                  0x3581dfc0 -[NSObject(NSObject) performSelector:] + 12
20  CoreFoundation                  0x35826d4a -[NSArray makeObjectsPerformSelector:] + 382
21  WebCore                         0x34bb000c -[WAKView viewWillDraw] + 24
22  CoreFoundation                  0x3581dfc0 -[NSObject(NSObject) performSelector:] + 12
23  CoreFoundation                  0x35826d4a -[NSArray makeObjectsPerformSelector:] + 382
24  WebCore                         0x34bb000c -[WAKView viewWillDraw] + 24
25  WebKit                          0x302c24cc -[WebView(WebPrivate) viewWillDraw] + 56
26  WebCore                         0x34bafec0 WebCore::TileCache::prepareToDraw() + 36
27  WebCore                         0x34bafe6e -[TileLayer display] + 26
28  QuartzCore                      0x31079fb0 CALayerDisplayIfNeeded + 176
29  QuartzCore                      0x3106f56e CA::Context::commit_transaction(CA::Transaction*) + 214
30  QuartzCore                      0x3106f37c CA::Transaction::commit() + 184
31  QuartzCore                      0x31092f96 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 46
32  CoreFoundation                  0x3580ac52 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 10
33  CoreFoundation                  0x3580aac6 __CFRunLoopDoObservers + 406
34  CoreFoundation                  0x358020c4 __CFRunLoopRun + 848
35  CoreFoundation                  0x35801c80 CFRunLoopRunSpecific + 224
36  CoreFoundation                  0x35801b88 CFRunLoopRunInMode + 52
37  GraphicsServices                0x320c84a4 GSEventRunModal + 108
38  GraphicsServices                0x320c8550 GSEventRun + 56
39  UIKit                           0x341dc322 -[UIApplication _run] + 406
40  UIKit                           0x341d9e8c UIApplicationMain + 664
41  WebViewTest                     0x00002c24 0x1000 + 7204
42  WebViewTest                     0x00002bd8 0x1000 + 7128

谁能给我一个主意?

提前致谢,弗洛里安

最佳答案

有一个小技巧可以覆盖这个崩溃。如果在加载视频内容之前稍微滚动 webview,则可以避免崩溃。在通过代码尝试之前,请尝试用手指在设备上稍微滚动 webView。它现在不会崩溃。

在代码中,做这样的事情:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
  [webView stringByEvaluatingJavaScriptFromString:@"window.scrollTo(0, 10);"];
}

通过javascript在webview上模拟滚动。滚动值可以低至 1,因此用户根本不会注意到滚动。

关于iphone - UIWebView 加载 html5-Video EXC_BAD_ACCESS 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5027876/

相关文章:

ios - 如何在iOS中集成whatsapp

iphone - 当用户向下滚动 UITableView,经过最后一个单元格时,为什么我的应用程序退出?

iphone - 如何从 NSDictionary 访问值

objective-c - 重新加载 UITableView 数据而不是可见单元格

ios - 如何避免或绕过 HomeKit 中的设置代码警报(弹出窗口)?

ios - 在 UIWebView 中显示来自不同 View Controller 的 URL

iphone - 更改 UITableViewCell 的 imageView 的边界

c++ - 如何在 *C* 中围绕命令行程序编写 GUI 包装器?

ios - 在加载 URL 期间如何使用 progressView?

ios - 如何从 UIWebView 打印内容?