iOS 11.3(和11.4)中UIWebView崩溃问题

8

我们有一个混合式iOS应用程序,其中包含一个UIWebView,可以加载一个相当复杂的网店(一堆跟踪像素、JavaScript、异步行为)。自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运行时触发了该错误,但我们目前没有更好的想法。

在苹果论坛(https://forums.developer.apple.com/thread/97676)上有一个想法,认为这与JavaScript和onpageunload或类似的东西有关。您能在本地重现此问题吗?如果您不断削减网页的各个部分,直到崩溃停止,希望您可以找到导致问题的具体JavaScript,并制作一个独立的测试用例,这是苹果公司想要看到的,因为这是苹果需要解决的问题...我会自己做这件事,但我还没有从HTML / JavaScript中获得可重现的崩溃。 - EGB
2个回答

0

我们通过阻止一个被嵌入在 iFrame 中实现了回调 onunload 事件的 JavaScript 文件并试图做一些请求的方式来解决这个问题。

  • 我们也无法再从 iOS 11.4+ 开始复现此错误。

0

我通过在JavaScriptCore(WebKit)中禁用JIT来解决了这个问题。

我将以下代码放在我的AppDelegate中:

setenv("JSC_useJIT", "false", 0);

希望这能有所帮助。

顺祝商祺,Josh。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接