@@ -170,30 +170,41 @@ struct _WKWebViewRepresentable: AppKitOrUIKitViewRepresentable {
170
170
171
171
context. coordinator. webView = view
172
172
173
- switch configuration. source {
174
- case . url:
175
- break
176
- case . htmlString( let string) :
177
- view. loadHTMLString ( string, baseURL: nil )
178
- }
179
-
180
- DispatchQueue . main. async {
181
- self . appKitOrUIKitViewBinding? . wrappedValue = view
173
+ if let appKitOrUIKitViewBinding = self . appKitOrUIKitViewBinding {
174
+ DispatchQueue . main. async {
175
+ if appKitOrUIKitViewBinding. wrappedValue !== view {
176
+ appKitOrUIKitViewBinding. wrappedValue = view
177
+ } else {
178
+ view. _SwiftUIX_setNeedsLayout ( )
179
+ }
180
+ }
182
181
}
183
182
184
183
return view
185
184
}
186
185
187
186
func updateAppKitOrUIKitView( _ view: AppKitOrUIKitViewType , context: Context ) {
187
+ if view. navigationDelegate !== context. coordinator {
188
+ view. navigationDelegate = context. coordinator
189
+
190
+ view. reload ( )
191
+ }
192
+
188
193
view. _SwiftUIX_configuration = configuration
189
194
190
- switch configuration. source {
191
- case . url( let url) :
192
- if url != coordinator. activeLoadRequest? . url {
193
- coordinator. load ( url)
194
- }
195
- case . htmlString:
196
- break
195
+ if view. _latestSource != configuration. source {
196
+ defer {
197
+ view. _latestSource = configuration. source
198
+ }
199
+
200
+ switch configuration. source {
201
+ case . url( let url) :
202
+ if url != coordinator. activeLoadRequest? . url {
203
+ coordinator. load ( url)
204
+ }
205
+ case . htmlString( let string) :
206
+ view. loadHTMLString ( string, baseURL: nil )
207
+ }
197
208
}
198
209
}
199
210
@@ -220,7 +231,6 @@ extension _WKWebViewRepresentable {
220
231
didSet {
221
232
activeLoadRequest = nil
222
233
oldValue? . navigationDelegate = nil
223
- webView? . navigationDelegate = self
224
234
}
225
235
}
226
236
@@ -229,14 +239,18 @@ extension _WKWebViewRepresentable {
229
239
var activeLoadRequest : LoadRequest ?
230
240
231
241
func load( _ url: URL ) {
242
+ guard let webView else {
243
+ return
244
+ }
245
+
232
246
self . activeLoadRequest = nil
233
247
self . activeLoadRequest = . init( url: url, redirectedURL: nil )
234
248
235
249
DispatchQueue . main. async {
236
250
self . isLoading = true
237
251
}
238
252
239
- webView? . load ( URLRequest ( url: url) )
253
+ webView. load ( URLRequest ( url: url) )
240
254
}
241
255
242
256
func webView(
0 commit comments