Lir*_*dav 6 webkit uiwebview ios
我有一个iOS应用程序随机似乎在具有UIWebView的屏幕上崩溃.看起来崩溃主要发生在iPhone 5C设备上(占74%的时间),100%发生在iOS 10.X上.
异常消息是:
EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000028
Run Code Online (Sandbox Code Playgroud)
从那个低内存地址,它让我觉得有些东西nil.
这是回溯(这不是主线程):
0 WebCore WebCore::FrameTree::top() + 0
1 WebCore WebCore::ContentSecurityPolicy::allowFrameAncestors() + 33
2 WebCore WebCore::DocumentLoader::responseReceived() + 413
3 WebCore WebCore::DocumentLoader::handleSubstituteDataLoadNow() + 203
4 WebCore WebCore::ThreadTimers::sharedTimerFiredInternal() + 149
5 WebCore WebCore::timerFired() + 23
6 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 15
7 CoreFoundation __CFRunLoopDoTimer + 833
8 CoreFoundation __CFRunLoopDoTimers + 189
9 CoreFoundation __CFRunLoopRun + 781
10 CoreFoundation CFRunLoopRunSpecific + 471
11 CoreFoundation CFRunLoopRunInMode + 105
12 WebCore RunWebThread() + 427
13 libsystem_pthread.dylib _pthread_body + 217
14 libsystem_pthread.dylib _pthread_start + 235
Run Code Online (Sandbox Code Playgroud)
我自己无法重现这次崩溃.
由于WebKit是开源的,我找到了它崩溃的代码:WebCore :: FrameTree :: top.从查看代码,我猜m_thisFrame->tree()是NULL,但我不知道如何解释它.我不确定在这种情况下究竟是什么"框架"和"树".
从回溯看起来有一些计时器被解雇,可能是在视图控制器或Web视图已被解除分配后?这个计时器是由于JavaScript setTimeout调用吗?
此外,我注意到每次发生此次崩溃时,我都会[UIWebViewDelegate webView:didFailLoadWithError:]在崩溃前接到电话.该委托方法中返回的最常见错误是:
但是我没有将错误消息与崩溃相关联的分析,所以我不确定哪个(如果有的话)会解释它.当该委托方法触发时,我向用户显示模态中的错误消息.这可能与坠机有关吗?我尝试重现"帧加载中断"和"太多HTTP重定向"错误,但都没有导致我在模拟器中崩溃.
我已经按照建议在这个答案(大部分),并呼吁[webview stopLoading]在viewWillDisappear和我呼吁self.webView.delegate = nil在dealloc含有视图控制器,但它并没有帮助.
这并不是真正的答案,但此崩溃似乎与启用内容过滤(父控件)时有关。如果您将应用程序在 UIWebView 中加载的任何域添加到 iOS 父控件阻止列表中,您应该在应用程序日志中看到此错误(来自 WebKit 的 WebFilter 内部)。它似乎以某种方式使 UIWebView 无效,因此当您再次与它交互时,它会导致整个应用程序崩溃。您可以通过切换到 WKWebView 来避免崩溃。
WF: WebFilterEvaluator:addData: https://some-blocked-url.com is restricted: blacklisted
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |