Skip to content

Commit d39b1ef

Browse files
Fixed User Script remove methods, Fixed macOS available checks for XCode 14.1
1 parent 34236b0 commit d39b1ef

File tree

12 files changed

+86
-25
lines changed

12 files changed

+86
-25
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 6.0.0-beta.14
2+
3+
- Fixed User Script remove methods
4+
- Fixed macOS available checks for XCode 14.1
5+
16
## 6.0.0-beta.13
27

38
- Added `ContentBlockerActionType.BLOCK_COOKIES` and `ContentBlockerActionType.IGNORE_PREVIOUS_RULES` for iOS and macOS platforms

ios/Classes/Types/WKUserContentController.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ extension WKUserContentController {
276276

277277
var userScriptsUpdated: [WKUserScript] = []
278278
for script in userScripts {
279-
if !userScripts.contains(script) {
279+
if !scriptsToRemove.contains(script) {
280280
userScriptsUpdated.append(script)
281281
}
282282
}
@@ -296,6 +296,7 @@ extension WKUserContentController {
296296
for script in allUserOnlyScripts {
297297
if let scriptName = script.groupName, scriptName == groupName {
298298
scriptsToRemove.append(script)
299+
userOnlyScripts[script.injectionTime]!.remove(script)
299300
}
300301
}
301302
removeUserScripts(scriptsToRemove: scriptsToRemove, shouldAddPreviousScripts: shouldAddPreviousScripts)
@@ -307,6 +308,7 @@ extension WKUserContentController {
307308
for script in allPluginScripts {
308309
if let scriptName = script.groupName, scriptName == groupName {
309310
scriptsToRemove.append(script)
311+
pluginScripts[script.injectionTime]!.remove(script)
310312
}
311313
}
312314
removeUserScripts(scriptsToRemove: scriptsToRemove, shouldAddPreviousScripts: shouldAddPreviousScripts)

lib/src/in_app_webview/in_app_webview_controller.dart

Lines changed: 63 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ class InAppWebViewController {
5656
static MethodChannel _staticChannel = IN_APP_WEBVIEW_STATIC_CHANNEL;
5757
Map<String, JavaScriptHandlerCallback> javaScriptHandlersMap =
5858
HashMap<String, JavaScriptHandlerCallback>();
59-
List<UserScript> _userScripts = [];
59+
final Map<UserScriptInjectionTime, List<UserScript>> _userScripts = {
60+
UserScriptInjectionTime.AT_DOCUMENT_START: <UserScript>[],
61+
UserScriptInjectionTime.AT_DOCUMENT_END: <UserScript>[]
62+
};
6063
Set<String> _webMessageListenerObjNames = Set();
6164
Map<String, ScriptHtmlTagAttributes> _injectedScriptsFromURL = {};
6265

@@ -88,8 +91,23 @@ class InAppWebViewController {
8891
}
8992
});
9093
this._webview = webview;
91-
this._userScripts =
92-
List<UserScript>.from(webview.initialUserScripts ?? <UserScript>[]);
94+
95+
final initialUserScripts = webview.initialUserScripts;
96+
if (initialUserScripts != null) {
97+
for (final userScript in initialUserScripts) {
98+
if (userScript.injectionTime ==
99+
UserScriptInjectionTime.AT_DOCUMENT_START) {
100+
this
101+
._userScripts[UserScriptInjectionTime.AT_DOCUMENT_START]
102+
?.add(userScript);
103+
} else {
104+
this
105+
._userScripts[UserScriptInjectionTime.AT_DOCUMENT_END]
106+
?.add(userScript);
107+
}
108+
}
109+
}
110+
93111
this._init();
94112
}
95113

@@ -99,8 +117,21 @@ class InAppWebViewController {
99117
UnmodifiableListView<UserScript>? initialUserScripts) {
100118
this._channel = channel;
101119
this._inAppBrowser = inAppBrowser;
102-
this._userScripts =
103-
List<UserScript>.from(initialUserScripts ?? <UserScript>[]);
120+
121+
if (initialUserScripts != null) {
122+
for (final userScript in initialUserScripts) {
123+
if (userScript.injectionTime ==
124+
UserScriptInjectionTime.AT_DOCUMENT_START) {
125+
this
126+
._userScripts[UserScriptInjectionTime.AT_DOCUMENT_START]
127+
?.add(userScript);
128+
} else {
129+
this
130+
._userScripts[UserScriptInjectionTime.AT_DOCUMENT_END]
131+
?.add(userScript);
132+
}
133+
}
134+
}
104135
this._init();
105136
}
106137

@@ -2793,8 +2824,9 @@ class InAppWebViewController {
27932824

27942825
Map<String, dynamic> args = <String, dynamic>{};
27952826
args.putIfAbsent('userScript', () => userScript.toMap());
2796-
if (!_userScripts.contains(userScript)) {
2797-
_userScripts.add(userScript);
2827+
if (!(_userScripts[userScript.injectionTime]?.contains(userScript) ??
2828+
false)) {
2829+
_userScripts[userScript.injectionTime]?.add(userScript);
27982830
await _channel.invokeMethod('addUserScript', args);
27992831
}
28002832
}
@@ -2834,12 +2866,12 @@ class InAppWebViewController {
28342866
assert(_webview?.windowId == null ||
28352867
defaultTargetPlatform != TargetPlatform.iOS);
28362868

2837-
var index = _userScripts.indexOf(userScript);
2838-
if (index == -1) {
2869+
var index = _userScripts[userScript.injectionTime]?.indexOf(userScript);
2870+
if (index == null || index == -1) {
28392871
return false;
28402872
}
28412873

2842-
_userScripts.remove(userScript);
2874+
_userScripts[userScript.injectionTime]?.remove(userScript);
28432875
Map<String, dynamic> args = <String, dynamic>{};
28442876
args.putIfAbsent('userScript', () => userScript.toMap());
28452877
args.putIfAbsent('index', () => index);
@@ -2863,6 +2895,22 @@ class InAppWebViewController {
28632895
assert(_webview?.windowId == null ||
28642896
defaultTargetPlatform != TargetPlatform.iOS);
28652897

2898+
final List<UserScript> userScriptsAtDocumentStart = List.from(
2899+
_userScripts[UserScriptInjectionTime.AT_DOCUMENT_START] ?? []);
2900+
for (final userScript in userScriptsAtDocumentStart) {
2901+
if (userScript.groupName == groupName) {
2902+
_userScripts[userScript.injectionTime]?.remove(userScript);
2903+
}
2904+
}
2905+
2906+
final List<UserScript> userScriptsAtDocumentEnd =
2907+
List.from(_userScripts[UserScriptInjectionTime.AT_DOCUMENT_END] ?? []);
2908+
for (final userScript in userScriptsAtDocumentEnd) {
2909+
if (userScript.groupName == groupName) {
2910+
_userScripts[userScript.injectionTime]?.remove(userScript);
2911+
}
2912+
}
2913+
28662914
Map<String, dynamic> args = <String, dynamic>{};
28672915
args.putIfAbsent('groupName', () => groupName);
28682916
await _channel.invokeMethod('removeUserScriptsByGroupName', args);
@@ -2884,8 +2932,8 @@ class InAppWebViewController {
28842932
assert(_webview?.windowId == null ||
28852933
defaultTargetPlatform != TargetPlatform.iOS);
28862934

2887-
for (var i = 0; i < userScripts.length; i++) {
2888-
await removeUserScript(userScript: userScripts[i]);
2935+
for (final userScript in userScripts) {
2936+
await removeUserScript(userScript: userScript);
28892937
}
28902938
}
28912939

@@ -2903,7 +2951,9 @@ class InAppWebViewController {
29032951
assert(_webview?.windowId == null ||
29042952
defaultTargetPlatform != TargetPlatform.iOS);
29052953

2906-
_userScripts.clear();
2954+
_userScripts[UserScriptInjectionTime.AT_DOCUMENT_START]?.clear();
2955+
_userScripts[UserScriptInjectionTime.AT_DOCUMENT_END]?.clear();
2956+
29072957
Map<String, dynamic> args = <String, dynamic>{};
29082958
await _channel.invokeMethod('removeAllUserScripts', args);
29092959
}

lib/src/in_app_webview/in_app_webview_settings.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,7 +1174,7 @@ class InAppWebViewSettings_ {
11741174
///
11751175
///**NOTE for iOS**: available on iOS 15.4+.
11761176
///
1177-
///**NOTE for MacOS**: available on MacOS 12.0+.
1177+
///**NOTE for MacOS**: available on MacOS 12.3+.
11781178
///
11791179
///**Supported Platforms/Implementations**:
11801180
///- iOS
@@ -1199,7 +1199,7 @@ class InAppWebViewSettings_ {
11991199
///
12001200
///**NOTE for iOS**: available on iOS 15.4+.
12011201
///
1202-
///**NOTE for MacOS**: available on MacOS 12.0+.
1202+
///**NOTE for MacOS**: available on MacOS 12.3+.
12031203
///
12041204
///**Supported Platforms/Implementations**:
12051205
///- iOS

lib/src/in_app_webview/in_app_webview_settings.g.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/types/user_script.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class UserScript_ {
2727
///Specify true to inject the script only into the main frame, or false to inject it into all frames.
2828
///The default value is `true`.
2929
///
30-
///**NOTE**: available only on iOS.
30+
///**NOTE**: available only on iOS and MacOS.
3131
bool forMainFrameOnly;
3232

3333
///A set of matching rules for the allowed origins.

lib/src/types/user_script.g.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

macos/Classes/InAppWebView/InAppWebView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public class InAppWebView: WKWebView, WKUIDelegate,
175175
configuration.preferences.isTextInteractionEnabled = settings.isTextInteractionEnabled
176176
}
177177

178-
if #available(macOS 12.0, *) {
178+
if #available(macOS 12.3, *) {
179179
configuration.preferences.isSiteSpecificQuirksModeEnabled = settings.isSiteSpecificQuirksModeEnabled
180180
configuration.preferences.isElementFullscreenEnabled = settings.isElementFullscreenEnabled
181181
}
@@ -725,7 +725,7 @@ public class InAppWebView: WKWebView, WKUIDelegate,
725725
self.underPageBackgroundColor = NSColor(hexString: underPageBackgroundColor)
726726
}
727727
}
728-
if #available(macOS 12.0, *) {
728+
if #available(macOS 12.3, *) {
729729
if newSettingsMap["isSiteSpecificQuirksModeEnabled"] != nil, settings?.isSiteSpecificQuirksModeEnabled != newSettings.isSiteSpecificQuirksModeEnabled {
730730
configuration.preferences.isSiteSpecificQuirksModeEnabled = newSettings.isSiteSpecificQuirksModeEnabled
731731
}

macos/Classes/InAppWebView/InAppWebViewSettings.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public class InAppWebViewSettings: ISettings<InAppWebView> {
100100
}
101101
if #available(macOS 12.0, *) {
102102
realSettings["underPageBackgroundColor"] = webView.underPageBackgroundColor.hexString
103+
}
104+
if #available(macOS 12.3, *) {
103105
realSettings["isSiteSpecificQuirksModeEnabled"] = configuration.preferences.isSiteSpecificQuirksModeEnabled
104106
realSettings["isElementFullscreenEnabled"] = configuration.preferences.isElementFullscreenEnabled
105107
}

macos/Classes/InAppWebView/WebViewChannelDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ public class WebViewChannelDelegate : ChannelDelegate {
595595
break
596596
case .isInFullscreen:
597597
if let webView = webView {
598-
if #available(macOS 12.0, *) {
598+
if #available(macOS 13.0, *) {
599599
result(webView.fullscreenState == .inFullscreen)
600600
} else {
601601
result(webView.inFullscreen)

0 commit comments

Comments
 (0)