@@ -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 }
0 commit comments