WKWebView 线程 1:使用位置时发出 SIGABRT 信号

WKWebView Thread 1: signal SIGABRT when using location

我是 Swift 和 WKWebView 的新手。

我在我的应用程序中实现了 WKWebView。我想在其中显示一个使用 https://www.google.com/maps.

等位置的网站

我在Info.plist中添加了NSLocationWhenInUseUsageDescription

当我第一次打开应用程序时,有一个提示要求位置。

当我点击 Allow 时,应用程序崩溃并出现 Thread 1: signal SIGABRT 错误。

我检查了所有网点,绝对没有错

还显示错误:

UIAlertView is deprecated and unavailable for UIScene based applications, please use UIAlertController!

但我没有明确调用 UIAlertView 所以我不知道如何解决这个问题。

我也是,这很糟糕。

 *** Terminating app due to uncaught exception 'NSObjectNotAvailableException', reason: 'UIAlertView is deprecated and unavailable for UIScene based applications, please use UIAlertController!'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff23b98bde __exceptionPreprocess + 350
    1   libobjc.A.dylib                     0x00007fff503b5b20 objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff23b98a1c +[NSException raise:format:] + 188
    3   UIKitCore                           0x00007fff466e9463 -[UIAlertView initWithFrame:] + 417
    4   UIKitCore                           0x00007fff466e9ad0 -[UIAlertView initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:] + 218
    5   UIKitCore                           0x00007fff47516acf +[UIAlertView(ViewServiceSupport) _alertViewForWindow:] + 217
    6   UIKitCore                           0x00007fff476cdb44 -[UIWebGeolocationPolicyDecider _executeNextChallenge] + 242
    7   WebKit                              0x00007fff2d123a6d _ZN6WebKit43decidePolicyForGeolocationRequestFromOriginEPN7WebCore14SecurityOriginERKN3WTF6StringEPU37objcproto26WebAllowDenyPolicyListener11objc_objectP8UIWindow + 169
    8   WebKit                              0x00007fff2d123641 -[WKGeolocationProviderIOS(WebGeolocationCoreLocationUpdateListener) geolocationAuthorizationGranted] + 603
    9   WebKit                              0x00007fff2d12328d -[WKGeolocationProviderIOS
...

有趣的是,"location always" 描述中没有出现此错误。但你永远找不到位置...

我已将我的应用程序降级到目标平台 "iOS 12" 而不是 13,这样就允许 WKWebView 的第二个 "Alert" 使用位置数据。我不知道如何提供 UIAlertControl 而不是 WKWebView 要求的 UIAlertView

网络上有很多人抱怨 iOS 13 中所做的更新,以及有多少框架和库受到这些更改的影响。

您可以在 javascript 中拦截警报,例如如何拒绝权限请求:

 let removeLocationJS = """
 navigator.geolocation.getCurrentPosition = function(success, error, options) {
     error({
         PERMISSION_DENIED: 1,
         code: 1
     });
 };
 """

 let removeLocation = WKUserScript(source: removeLocationJS, injectionTime: .atDocumentStart, forMainFrameOnly: true)
 contentController.addUserScript(removeLocation)

 let config = WKWebViewConfiguration()
 config.userContentController = contentController

 let webView = WKWebView(frame: .zero, configuration: config)

来自@aranasaurus 的代码片段

描述了如何处理位置权限而不是拒绝它