Skip to content

Commit 21091d9

Browse files
committed
Apply patch for onUrlChanged and injectedCookiesSource
1 parent cdf33ef commit 21091d9

File tree

7 files changed

+151
-45
lines changed

7 files changed

+151
-45
lines changed

WKWebView.ios.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ class WKWebView extends React.Component {
187187
* Receive scroll events from view
188188
*/
189189
onScroll: PropTypes.func,
190+
onUrlChanged: PropTypes.func,
190191
/**
191192
* A callback to get response headers, http status code and http localized status code.
192193
*/
@@ -221,6 +222,10 @@ class WKWebView extends React.Component {
221222
* Sets the JS to be injected when the webpage loads.
222223
*/
223224
injectedJavaScript: PropTypes.string,
225+
/**
226+
* A domain whose cookies will be injected into `document.cookies`.
227+
*/
228+
injectedCookiesSource: PropTypes.string,
224229
/**
225230
* Allows custom handling of any webview requests by a JS handler. Return true
226231
* or false from this method to continue loading the request.
@@ -339,6 +344,7 @@ class WKWebView extends React.Component {
339344
injectedJavaScriptForMainFrameOnly={this.props.injectedJavaScriptForMainFrameOnly}
340345
injectJavaScript={this.props.injectJavaScript}
341346
injectedJavaScript={this.props.injectedJavaScript}
347+
injectedCookiesSource={this.props.injectedCookiesSource}
342348
bounces={this.props.bounces}
343349
scrollEnabled={this.props.scrollEnabled}
344350
contentInset={this.props.contentInset}
@@ -355,6 +361,7 @@ class WKWebView extends React.Component {
355361
onProgress={this._onProgress}
356362
onMessage={this._onMessage}
357363
onScroll={this._onScroll}
364+
onUrlChanged={this._onUrlChanged}
358365
onShouldStartLoadWithRequest={onShouldStartLoadWithRequest}
359366
pagingEnabled={this.props.pagingEnabled}
360367
directionalLockEnabled={this.props.directionalLockEnabled}
@@ -511,6 +518,11 @@ class WKWebView extends React.Component {
511518
onScroll && onScroll(event.nativeEvent);
512519
};
513520

521+
_onUrlChanged = (event: Event) => {
522+
const onUrlChanged = this.props.onUrlChanged;
523+
onUrlChanged && onUrlChanged(event.nativeEvent);
524+
}
525+
514526
_onNavigationResponse = (event: Event) => {
515527
const { onNavigationResponse } = this.props;
516528
onNavigationResponse && onNavigationResponse(event)

ios/RCTWKWebView.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
097457AF1D2AF4E0000D9368 /* RCTWKWebView.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 097457AC1D2A4595000D9368 /* RCTWKWebView.h */; };
1313
097457B01D2AF4E0000D9368 /* RCTWKWebViewManager.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 097457A81D2A457C000D9368 /* RCTWKWebViewManager.h */; };
1414
3E609CF61EAA815D00187C8C /* WeakScriptMessageDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E609CF51EAA815D00187C8C /* WeakScriptMessageDelegate.m */; };
15+
AAE1993720AC4A9100C9735F /* NSHTTPCookie+SetCookie.m in Sources */ = {isa = PBXBuildFile; fileRef = AAE1993620AC4A9100C9735F /* NSHTTPCookie+SetCookie.m */; };
1516
E683F3D72080F3400005F1F5 /* WKProcessPool+SharedProcessPool.m in Sources */ = {isa = PBXBuildFile; fileRef = E683F3D62080F3400005F1F5 /* WKProcessPool+SharedProcessPool.m */; };
1617
/* End PBXBuildFile section */
1718

@@ -37,6 +38,8 @@
3738
097457AD1D2A4595000D9368 /* RCTWKWebView.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = RCTWKWebView.m; sourceTree = "<group>"; tabWidth = 2; };
3839
3E609CF41EAA815D00187C8C /* WeakScriptMessageDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakScriptMessageDelegate.h; sourceTree = "<group>"; };
3940
3E609CF51EAA815D00187C8C /* WeakScriptMessageDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WeakScriptMessageDelegate.m; sourceTree = "<group>"; };
41+
AAE1993520AC4A8100C9735F /* NSHTTPCookie+SetCookie.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSHTTPCookie+SetCookie.h"; sourceTree = "<group>"; };
42+
AAE1993620AC4A9100C9735F /* NSHTTPCookie+SetCookie.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSHTTPCookie+SetCookie.m"; sourceTree = "<group>"; };
4043
E683F3D32080F2E10005F1F5 /* WKProcessPool+SharedProcessPool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "WKProcessPool+SharedProcessPool.h"; sourceTree = "<group>"; };
4144
E683F3D62080F3400005F1F5 /* WKProcessPool+SharedProcessPool.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "WKProcessPool+SharedProcessPool.m"; sourceTree = "<group>"; };
4245
/* End PBXFileReference section */
@@ -77,6 +80,8 @@
7780
097457A91D2A457C000D9368 /* RCTWKWebViewManager.m */,
7881
3E609CF41EAA815D00187C8C /* WeakScriptMessageDelegate.h */,
7982
3E609CF51EAA815D00187C8C /* WeakScriptMessageDelegate.m */,
83+
AAE1993520AC4A8100C9735F /* NSHTTPCookie+SetCookie.h */,
84+
AAE1993620AC4A9100C9735F /* NSHTTPCookie+SetCookie.m */,
8085
E683F3D32080F2E10005F1F5 /* WKProcessPool+SharedProcessPool.h */,
8186
E683F3D62080F3400005F1F5 /* WKProcessPool+SharedProcessPool.m */,
8287
);
@@ -141,6 +146,7 @@
141146
097457AB1D2A457C000D9368 /* RCTWKWebViewManager.m in Sources */,
142147
3E609CF61EAA815D00187C8C /* WeakScriptMessageDelegate.m in Sources */,
143148
E683F3D72080F3400005F1F5 /* WKProcessPool+SharedProcessPool.m in Sources */,
149+
AAE1993720AC4A9100C9735F /* NSHTTPCookie+SetCookie.m in Sources */,
144150
097457AE1D2A4595000D9368 /* RCTWKWebView.m in Sources */,
145151
);
146152
runOnlyForDeploymentPostprocessing = 0;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#import <Foundation/Foundation.h>
2+
3+
@interface NSHTTPCookie(SetCookie)
4+
- (NSString*)formatForSetCookie;
5+
@end
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#import "NSHTTPCookie+SetCookie.h"
2+
3+
@implementation NSHTTPCookie(SetCookie)
4+
- (NSString*)formatForSetCookie {
5+
NSString* name = [self name];
6+
NSString* value = [self value];
7+
NSString* domain = [self domain];
8+
NSString* path = [self path];
9+
NSString* isSecure = [self isSecure] ? @"Secure;" : @"";
10+
11+
NSDateFormatter* rfc7231DateFormatter = [[NSDateFormatter alloc] init];
12+
NSLocale* posixLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
13+
[rfc7231DateFormatter setLocale:posixLocale];
14+
[rfc7231DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
15+
rfc7231DateFormatter.dateFormat = @"EEE, dd MMM yyyy HH mm ss 'GMT'";
16+
NSDate* expiresDate = [self expiresDate];
17+
NSString* formattedExpiresDate = [self expiresDate] ? [NSString stringWithFormat:@"Expires=%@;", [rfc7231DateFormatter stringFromDate:expiresDate]] : @"";
18+
19+
return [NSString stringWithFormat:@"%@=%@; Domain=%@; Path=%@; %@%@ ", name, value, domain, path, formattedExpiresDate, isSecure];
20+
}
21+
@end

ios/RCTWKWebView/RCTWKWebView.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ shouldStartLoadForRequest:(NSMutableDictionary<NSString *, id> *)request
3636
@property (nonatomic, assign) BOOL injectedJavaScriptForMainFrameOnly;
3737
@property (nonatomic, copy) NSString *injectJavaScript;
3838
@property (nonatomic, copy) NSString *injectedJavaScript;
39+
@property (nonatomic, copy) NSString *injectedCookiesSource;
3940
@property (nonatomic, assign) BOOL hideKeyboardAccessoryView;
4041
@property (nonatomic, assign) BOOL keyboardDisplayRequiresUserAction;
4142

0 commit comments

Comments
 (0)