@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.
- package/README.md +20 -21
- package/android/src/main/AndroidManifest.xml +0 -1
- package/android/src/main/java/ee/forgr/capacitor_inappbrowser/InAppBrowserPlugin.java +118 -80
- package/android/src/main/java/ee/forgr/capacitor_inappbrowser/Options.java +9 -0
- package/android/src/main/java/ee/forgr/capacitor_inappbrowser/WebViewDialog.java +739 -37
- package/dist/docs.json +54 -62
- package/dist/esm/definitions.d.ts +12 -13
- package/dist/esm/definitions.js.map +1 -1
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/InAppBrowserPlugin.swift +38 -22
- package/ios/Plugin/WKWebViewController.swift +45 -110
- package/package.json +1 -1
- package/ios/Plugin/Assets.xcassets/Contents.json +0 -6
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
1075
|
-
|
|
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
|
-
|
|
1266
|
+
strongCompletionHandler()
|
|
1341
1267
|
}))
|
|
1342
|
-
|
|
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