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 的代码片段
描述了如何处理位置权限而不是拒绝它
我是 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 的代码片段