iOS 11.3(和 11.4)中的 UIWebView 崩溃
Crash in UIWebView in iOS 11.3 (and 11.4)
我们有一个带有 UIWebView 的混合 iOS 应用程序,它加载了一个相当复杂的网上商店(一堆跟踪像素、javasript、异步行为)。自 iOS 11.3 推出以来,我们看到很多崩溃似乎来自 UIWebView 或相关组件。堆栈跟踪看起来像这样
Crashed: WebThread
0 WebCore 0x18b7b0d98 WebCore::Page::sessionID() const + 162
1 WebKitLegacy 0x18be91204 WebFrameNetworkingContext::storageSession() const + 24
2 WebCore 0x18ad818bc WebCore::ResourceHandle::willSendRequest(WebCore::ResourceRequest&&, WebCore::ResourceResponse&&, WTF::CompletionHandler<void (WebCore::ResourceRequest&&)>&&) + 1012
3 WebCore 0x18ad86f88 WTF::Function<void ()>::CallableWrapper<-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]::$_1>::call() + 208
4 JavaScriptCore 0x1892157d4 WTF::dispatchFunctionsFromMainThread() + 344
5 Foundation 0x1830fe0ec __NSThreadPerformPerform + 340
6 CoreFoundation 0x18265b404 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
7 CoreFoundation 0x18265ac2c __CFRunLoopDoSources0 + 276
8 CoreFoundation 0x18265879c __CFRunLoopRun + 1204
9 CoreFoundation 0x182578da8 CFRunLoopRunSpecific + 552
10 WebCore 0x18a805dcc RunWebThread(void*) + 592
11 libsystem_pthread.dylib 0x1822d9220 _pthread_body + 272
12 libsystem_pthread.dylib 0x1822d9110 _pthread_body + 290
13 libsystem_pthread.dylib 0x1822d7b10 thread_start + 4
我们看不到我们代码的路径,并怀疑 UIWebView 的 JavaScript 运行时中有什么东西触发了错误,但我不知道 atm。
我通过禁用 JavaScriptCore (WebKit) 中的 JIT 解决了这个问题。
我把它放在我的 AppDelegate 中:
setenv("JSC_useJIT", "false", 0);
希望对您有所帮助。
亲切的问候,乔希。
我们已通过阻止一个 JavaScript 文件来解决这个问题,该文件是
- 嵌入到 iFrame 中
- 已实现 onunload 事件的回调
- 尝试做一些应要求的事情。
从 iOS 11.4+ 开始,我们也无法再重现此错误。
我们有一个带有 UIWebView 的混合 iOS 应用程序,它加载了一个相当复杂的网上商店(一堆跟踪像素、javasript、异步行为)。自 iOS 11.3 推出以来,我们看到很多崩溃似乎来自 UIWebView 或相关组件。堆栈跟踪看起来像这样
Crashed: WebThread
0 WebCore 0x18b7b0d98 WebCore::Page::sessionID() const + 162
1 WebKitLegacy 0x18be91204 WebFrameNetworkingContext::storageSession() const + 24
2 WebCore 0x18ad818bc WebCore::ResourceHandle::willSendRequest(WebCore::ResourceRequest&&, WebCore::ResourceResponse&&, WTF::CompletionHandler<void (WebCore::ResourceRequest&&)>&&) + 1012
3 WebCore 0x18ad86f88 WTF::Function<void ()>::CallableWrapper<-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]::$_1>::call() + 208
4 JavaScriptCore 0x1892157d4 WTF::dispatchFunctionsFromMainThread() + 344
5 Foundation 0x1830fe0ec __NSThreadPerformPerform + 340
6 CoreFoundation 0x18265b404 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
7 CoreFoundation 0x18265ac2c __CFRunLoopDoSources0 + 276
8 CoreFoundation 0x18265879c __CFRunLoopRun + 1204
9 CoreFoundation 0x182578da8 CFRunLoopRunSpecific + 552
10 WebCore 0x18a805dcc RunWebThread(void*) + 592
11 libsystem_pthread.dylib 0x1822d9220 _pthread_body + 272
12 libsystem_pthread.dylib 0x1822d9110 _pthread_body + 290
13 libsystem_pthread.dylib 0x1822d7b10 thread_start + 4
我们看不到我们代码的路径,并怀疑 UIWebView 的 JavaScript 运行时中有什么东西触发了错误,但我不知道 atm。
我通过禁用 JavaScriptCore (WebKit) 中的 JIT 解决了这个问题。
我把它放在我的 AppDelegate 中:
setenv("JSC_useJIT", "false", 0);
希望对您有所帮助。
亲切的问候,乔希。
我们已通过阻止一个 JavaScript 文件来解决这个问题,该文件是
- 嵌入到 iFrame 中
- 已实现 onunload 事件的回调
- 尝试做一些应要求的事情。
从 iOS 11.4+ 开始,我们也无法再重现此错误。