@capgo/inappbrowser 6.13.2 → 6.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -165,7 +165,6 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
165
165
  open var preShowScript: String?
166
166
  open var leftNavigationBarItemTypes: [BarButtonItemType] = []
167
167
  open var rightNavigaionBarItemTypes: [BarButtonItemType] = []
168
- open var toolbarItemTypes: [BarButtonItemType] = [.back, .forward, .activity]
169
168
 
170
169
  // Status bar style to be applied
171
170
  open var statusBarStyle: UIStatusBarStyle = .default
@@ -374,14 +373,6 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
374
373
  stopBarButtonItem.tintColor = tintColor
375
374
  activityBarButtonItem.tintColor = tintColor
376
375
  doneBarButtonItem.tintColor = tintColor
377
- flexibleSpaceBarButtonItem.tintColor = tintColor
378
-
379
- // Update toolbar items
380
- if let items = toolbarItems {
381
- for item in items {
382
- item.tintColor = tintColor
383
- }
384
- }
385
376
 
386
377
  // Update navigation items
387
378
  if let leftItems = navigationItem.leftBarButtonItems {
@@ -433,13 +424,6 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
433
424
  updateButtonTintColors()
434
425
  }
435
426
  }
436
-
437
- if let toolbar = navigationController?.toolbar {
438
- if toolbar.backgroundColor == UIColor.black || toolbar.backgroundColor == UIColor.white {
439
- toolbar.backgroundColor = isDarkMode ? UIColor.black : UIColor.white
440
- toolbar.tintColor = textColor
441
- }
442
- }
443
427
  }
444
428
  }
445
429
 
@@ -521,6 +505,7 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
521
505
  userContentController.add(self, name: "close")
522
506
  webConfiguration.allowsInlineMediaPlayback = true
523
507
  webConfiguration.userContentController = userContentController
508
+ webConfiguration.allowsInlineMediaPlayback = true
524
509
  let webView = WKWebView(frame: .zero, configuration: webConfiguration)
525
510
 
526
511
  if webView.responds(to: Selector(("setInspectable:"))) {
@@ -595,9 +580,7 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
595
580
  // Don't force toolbar visibility
596
581
  if self.viewHeightPortrait == nil {
597
582
  self.viewHeightPortrait = self.view.safeAreaLayoutGuide.layoutFrame.size.height
598
- if toolbarItemTypes.count == 0 {
599
- self.viewHeightPortrait! += bottomPadding
600
- }
583
+ self.viewHeightPortrait! += bottomPadding
601
584
  if self.navigationController?.navigationBar.isHidden == true {
602
585
  self.viewHeightPortrait! += topPadding
603
586
  }
@@ -607,9 +590,7 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
607
590
  // Don't force toolbar visibility
608
591
  if self.viewHeightLandscape == nil {
609
592
  self.viewHeightLandscape = self.view.safeAreaLayoutGuide.layoutFrame.size.height
610
- if toolbarItemTypes.count == 0 {
611
- self.viewHeightLandscape! += bottomPadding
612
- }
593
+ self.viewHeightLandscape! += bottomPadding
613
594
  if self.navigationController?.navigationBar.isHidden == true {
614
595
  self.viewHeightLandscape! += topPadding
615
596
  }
@@ -956,79 +937,6 @@ fileprivate extension WKWebViewController {
956
937
 
957
938
  navigationItem.rightBarButtonItems = rightBarButtons
958
939
 
959
- // Create toolbar items
960
- if !toolbarItemTypes.isEmpty {
961
- // Check if toolbar has back and forward buttons
962
- let hasBackButton = toolbarItemTypes.contains(where: {
963
- if case .back = $0 { return true }
964
- return false
965
- })
966
-
967
- let hasForwardButton = toolbarItemTypes.contains(where: {
968
- if case .forward = $0 { return true }
969
- return false
970
- })
971
-
972
- let hasReloadButton = toolbarItemTypes.contains(where: {
973
- if case .reload = $0 { return true }
974
- return false
975
- })
976
-
977
- if hasBackButton && hasForwardButton {
978
- // Create Android-like toolbar with evenly spaced buttons
979
- var items: [UIBarButtonItem] = []
980
- let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
981
-
982
- // Add spacing before back button
983
- items.append(flexSpace)
984
-
985
- // Add back button
986
- items.append(backBarButtonItem)
987
-
988
- // Add spacing between buttons
989
- items.append(flexSpace)
990
-
991
- // Add forward button
992
- items.append(forwardBarButtonItem)
993
-
994
- // Add spacing between buttons
995
- items.append(flexSpace)
996
-
997
- // Add reload button if present
998
- if hasReloadButton {
999
- items.append(reloadBarButtonItem)
1000
- items.append(flexSpace)
1001
- }
1002
-
1003
- setToolbarItems(items, animated: true)
1004
- } else {
1005
- // For other toolbar types, map the items directly
1006
- let items = toolbarItemTypes.map { type -> UIBarButtonItem in
1007
- switch type {
1008
- case .back:
1009
- return backBarButtonItem
1010
- case .forward:
1011
- return forwardBarButtonItem
1012
- case .reload:
1013
- return reloadBarButtonItem
1014
- case .stop:
1015
- return stopBarButtonItem
1016
- case .activity:
1017
- return activityBarButtonItem
1018
- case .done:
1019
- return doneBarButtonItem
1020
- case .flexibleSpace:
1021
- return flexibleSpaceBarButtonItem
1022
- case .custom:
1023
- return UIBarButtonItem()
1024
- }
1025
- }
1026
- setToolbarItems(items, animated: true)
1027
- }
1028
- } else {
1029
- setToolbarItems([], animated: false)
1030
- }
1031
-
1032
940
  // After all buttons are set up, apply tint color
1033
941
  updateButtonTintColors()
1034
942
  }
@@ -1052,11 +960,6 @@ fileprivate extension WKWebViewController {
1052
960
  }
1053
961
 
1054
962
  let isLoading = webView?.isLoading ?? false
1055
- toolbarItems = toolbarItems?.map {
1056
- barButtonItem -> UIBarButtonItem in
1057
- return updateReloadBarButtonItem(barButtonItem, isLoading)
1058
- }
1059
-
1060
963
  navigationItem.leftBarButtonItems = navigationItem.leftBarButtonItems?.map {
1061
964
  barButtonItem -> UIBarButtonItem in
1062
965
  return updateReloadBarButtonItem(barButtonItem, isLoading)
@@ -1071,9 +974,8 @@ fileprivate extension WKWebViewController {
1071
974
  func setUpState() {
1072
975
  navigationController?.setNavigationBarHidden(false, animated: true)
1073
976
 
1074
- // Only show toolbar if there are toolbar items
1075
- let hideToolbar = toolbarItemTypes.isEmpty
1076
- navigationController?.setToolbarHidden(hideToolbar, animated: true)
977
+ // Always hide toolbar since we never want it
978
+ navigationController?.setToolbarHidden(true, animated: true)
1077
979
 
1078
980
  // Set tint colors but don't override specific colors
1079
981
  if tintColor == nil {
@@ -1082,12 +984,10 @@ fileprivate extension WKWebViewController {
1082
984
  let textColor = isDarkMode ? UIColor.white : UIColor.black
1083
985
 
1084
986
  navigationController?.navigationBar.tintColor = textColor
1085
- navigationController?.toolbar.tintColor = textColor
1086
987
  progressView?.progressTintColor = textColor
1087
988
  } else {
1088
989
  progressView?.progressTintColor = tintColor
1089
990
  navigationController?.navigationBar.tintColor = tintColor
1090
- navigationController?.toolbar.tintColor = tintColor
1091
991
  }
1092
992
  }
1093
993
 
@@ -1095,9 +995,7 @@ fileprivate extension WKWebViewController {
1095
995
  progressView?.progress = 0
1096
996
 
1097
997
  navigationController?.navigationBar.tintColor = previousNavigationBarState.tintColor
1098
- navigationController?.toolbar.tintColor = previousToolbarState.tintColor
1099
998
 
1100
- navigationController?.setToolbarHidden(previousToolbarState.hidden, animated: true)
1101
999
  navigationController?.setNavigationBarHidden(previousNavigationBarState.hidden, animated: true)
1102
1000
  }
1103
1001
 
@@ -1136,11 +1034,23 @@ fileprivate extension WKWebViewController {
1136
1034
  }
1137
1035
 
1138
1036
  func handleURLWithApp(_ url: URL, targetFrame: WKFrameInfo?) -> Bool {
1037
+ // If preventDeeplink is true, don't try to open URLs in external apps
1038
+ if self.preventDeeplink {
1039
+ return false
1040
+ }
1041
+
1139
1042
  let hosts = UrlsHandledByApp.hosts
1140
1043
  let schemes = UrlsHandledByApp.schemes
1141
1044
  let blank = UrlsHandledByApp.blank
1142
1045
 
1143
1046
  var tryToOpenURLWithApp = false
1047
+
1048
+ // Handle all non-http(s) schemes by default
1049
+ if let scheme = url.scheme?.lowercased(), !scheme.hasPrefix("http") {
1050
+ tryToOpenURLWithApp = true
1051
+ }
1052
+
1053
+ // Also handle specific hosts and schemes from UrlsHandledByApp
1144
1054
  if let host = url.host, hosts.contains(host) {
1145
1055
  tryToOpenURLWithApp = true
1146
1056
  }
@@ -1333,13 +1243,38 @@ fileprivate extension WKWebViewController {
1333
1243
  // MARK: - WKUIDelegate
1334
1244
  extension WKWebViewController: WKUIDelegate {
1335
1245
  public func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
1246
+ // Create a strong reference to the completion handler to ensure it's called
1247
+ let strongCompletionHandler = completionHandler
1248
+
1336
1249
  // Ensure UI updates are on the main thread
1337
- DispatchQueue.main.async {
1250
+ DispatchQueue.main.async { [weak self] in
1251
+ guard let self = self else {
1252
+ // View controller was deallocated
1253
+ strongCompletionHandler()
1254
+ return
1255
+ }
1256
+
1257
+ // Check if view is available and ready for presentation
1258
+ guard self.view.window != nil, !self.isBeingDismissed, !self.isMovingFromParent else {
1259
+ print("[InAppBrowser] Cannot present alert - view not in window hierarchy or being dismissed")
1260
+ strongCompletionHandler()
1261
+ return
1262
+ }
1263
+
1338
1264
  let alertController = UIAlertController(title: nil, message: message, preferredStyle: .alert)
1339
1265
  alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: { _ in
1340
- completionHandler()
1266
+ strongCompletionHandler()
1341
1267
  }))
1342
- self.present(alertController, animated: true, completion: nil)
1268
+
1269
+ // Try to present the alert
1270
+ do {
1271
+ self.present(alertController, animated: true, completion: nil)
1272
+ } catch {
1273
+ // This won't typically be triggered as present doesn't throw,
1274
+ // but adding as a safeguard
1275
+ print("[InAppBrowser] Error presenting alert: \(error)")
1276
+ strongCompletionHandler()
1277
+ }
1343
1278
  }
1344
1279
  }
1345
1280
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capgo/inappbrowser",
3
- "version": "6.13.2",
3
+ "version": "6.14.1",
4
4
  "description": "Capacitor plugin in app browser",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",
@@ -1,6 +0,0 @@
1
- {
2
- "info" : {
3
- "version" : 1,
4
- "author" : "xcode"
5
- }
6
- }