Skip to content

Commit c1ec77b

Browse files
committed
Merge in @mbishop-fiksus very clever inlining of the javascript code via a preprocessor macro. This eliminates the need to include WebViewJavascriptBridge.js.txt as a resouce.
1 parent 6e092f7 commit c1ec77b

File tree

10 files changed

+64
-37
lines changed

10 files changed

+64
-37
lines changed

Example Apps/ExampleApp-OSX.xcodeproj/project.pbxproj

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
2C136A3817641106004C7401 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C136A3717641106004C7401 /* AppDelegate.m */; };
1717
2C136A4217641236004C7401 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C136A4117641236004C7401 /* WebKit.framework */; };
1818
2C136A5A17642704004C7401 /* ExampleApp.html in Resources */ = {isa = PBXBuildFile; fileRef = 2C136A5917642704004C7401 /* ExampleApp.html */; };
19-
2C1562C5176BA9FF00B4AE50 /* WebViewJavascriptBridge.js.txt in Resources */ = {isa = PBXBuildFile; fileRef = 2C1562C3176BA9FF00B4AE50 /* WebViewJavascriptBridge.js.txt */; };
2019
2C1562C6176BA9FF00B4AE50 /* WebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1562C4176BA9FF00B4AE50 /* WebViewJavascriptBridge.m */; };
20+
2C3E7C491C5A8B8D00A1E322 /* WebViewJavascriptBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3E7C481C5A8B8D00A1E322 /* WebViewJavascriptBridge_JS.m */; };
2121
2CF17F5317D8AACF006E828B /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2CF17F5217D8AACF006E828B /* MainMenu.xib */; };
2222
/* End PBXBuildFile section */
2323

@@ -41,8 +41,9 @@
4141
2C136A4117641236004C7401 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
4242
2C136A5917642704004C7401 /* ExampleApp.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ExampleApp.html; sourceTree = SOURCE_ROOT; };
4343
2C1562C2176BA9FF00B4AE50 /* WebViewJavascriptBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridge.h; sourceTree = "<group>"; };
44-
2C1562C3176BA9FF00B4AE50 /* WebViewJavascriptBridge.js.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebViewJavascriptBridge.js.txt; sourceTree = "<group>"; };
4544
2C1562C4176BA9FF00B4AE50 /* WebViewJavascriptBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridge.m; sourceTree = "<group>"; };
45+
2C3E7C471C5A8B8D00A1E322 /* WebViewJavascriptBridge_JS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridge_JS.h; sourceTree = "<group>"; };
46+
2C3E7C481C5A8B8D00A1E322 /* WebViewJavascriptBridge_JS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridge_JS.m; sourceTree = "<group>"; };
4647
2CF17F5217D8AACF006E828B /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
4748
/* End PBXFileReference section */
4849

@@ -124,12 +125,13 @@
124125
2C1562C1176BA9FF00B4AE50 /* WebViewJavascriptBridge */ = {
125126
isa = PBXGroup;
126127
children = (
128+
2C3E7C471C5A8B8D00A1E322 /* WebViewJavascriptBridge_JS.h */,
129+
2C3E7C481C5A8B8D00A1E322 /* WebViewJavascriptBridge_JS.m */,
127130
0ECB01451A0EEB3A0037FF4E /* WebViewJavascriptBridgeBase.h */,
128131
0ECB01461A0EEB3A0037FF4E /* WebViewJavascriptBridgeBase.m */,
129132
0ECB01471A0EEB3A0037FF4E /* WKWebViewJavascriptBridge.h */,
130133
0ECB01481A0EEB3A0037FF4E /* WKWebViewJavascriptBridge.m */,
131134
2C1562C2176BA9FF00B4AE50 /* WebViewJavascriptBridge.h */,
132-
2C1562C3176BA9FF00B4AE50 /* WebViewJavascriptBridge.js.txt */,
133135
2C1562C4176BA9FF00B4AE50 /* WebViewJavascriptBridge.m */,
134136
);
135137
name = WebViewJavascriptBridge;
@@ -187,7 +189,6 @@
187189
isa = PBXResourcesBuildPhase;
188190
buildActionMask = 2147483647;
189191
files = (
190-
2C1562C5176BA9FF00B4AE50 /* WebViewJavascriptBridge.js.txt in Resources */,
191192
2C136A2F17641106004C7401 /* InfoPlist.strings in Resources */,
192193
2C136A3517641106004C7401 /* Credits.rtf in Resources */,
193194
2C136A5A17642704004C7401 /* ExampleApp.html in Resources */,
@@ -204,6 +205,7 @@
204205
files = (
205206
0ECB01491A0EEB3A0037FF4E /* WebViewJavascriptBridgeBase.m in Sources */,
206207
0ECB014A1A0EEB3A0037FF4E /* WKWebViewJavascriptBridge.m in Sources */,
208+
2C3E7C491C5A8B8D00A1E322 /* WebViewJavascriptBridge_JS.m in Sources */,
207209
2C136A3117641106004C7401 /* main.m in Sources */,
208210
2C1562C6176BA9FF00B4AE50 /* WebViewJavascriptBridge.m in Sources */,
209211
2C136A3817641106004C7401 /* AppDelegate.m in Sources */,

Example Apps/ExampleApp-iOS.xcodeproj/project.pbxproj

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
0E50601C1A01B442000BEEEA /* WebViewJavascriptBridgeBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E50601B1A01B442000BEEEA /* WebViewJavascriptBridgeBase.m */; };
1212
0E8082DB19EDC32300479452 /* WKWebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E8082DA19EDC32300479452 /* WKWebViewJavascriptBridge.m */; };
1313
0ECB01441A0EE1F20037FF4E /* ExampleWKWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ECB01431A0EE1F20037FF4E /* ExampleWKWebViewController.m */; };
14-
2C1562B5176B9F8400B4AE50 /* WebViewJavascriptBridge.js.txt in Resources */ = {isa = PBXBuildFile; fileRef = 2C1562B4176B9F8400B4AE50 /* WebViewJavascriptBridge.js.txt */; };
1514
2C1562C0176BA63500B4AE50 /* WebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1562A9176B9F6200B4AE50 /* WebViewJavascriptBridge.m */; };
15+
2C3E7C461C5A890A00A1E322 /* WebViewJavascriptBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3E7C451C5A890A00A1E322 /* WebViewJavascriptBridge_JS.m */; };
1616
2C45CA2C1884AD520002A4E2 /* ExampleUIWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C45CA2B1884AD520002A4E2 /* ExampleUIWebViewController.m */; };
1717
2CA045BF17117439006DEE8B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2CA045B717117439006DEE8B /* InfoPlist.strings */; };
1818
2CA045C217117439006DEE8B /* ExampleAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CA045BD17117439006DEE8B /* ExampleAppDelegate.m */; };
@@ -34,7 +34,8 @@
3434
0ECB01431A0EE1F20037FF4E /* ExampleWKWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleWKWebViewController.m; sourceTree = "<group>"; };
3535
2C1562A8176B9F6200B4AE50 /* WebViewJavascriptBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridge.h; sourceTree = "<group>"; };
3636
2C1562A9176B9F6200B4AE50 /* WebViewJavascriptBridge.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridge.m; sourceTree = "<group>"; };
37-
2C1562B4176B9F8400B4AE50 /* WebViewJavascriptBridge.js.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebViewJavascriptBridge.js.txt; sourceTree = "<group>"; };
37+
2C3E7C441C5A890A00A1E322 /* WebViewJavascriptBridge_JS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridge_JS.h; sourceTree = "<group>"; };
38+
2C3E7C451C5A890A00A1E322 /* WebViewJavascriptBridge_JS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridge_JS.m; sourceTree = "<group>"; };
3839
2C45CA2A1884AD520002A4E2 /* ExampleUIWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleUIWebViewController.h; sourceTree = "<group>"; };
3940
2C45CA2B1884AD520002A4E2 /* ExampleUIWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleUIWebViewController.m; sourceTree = "<group>"; };
4041
2CA045B817117439006DEE8B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
@@ -69,7 +70,8 @@
6970
2C1562A7176B9F5400B4AE50 /* WebViewJavascriptBridge */ = {
7071
isa = PBXGroup;
7172
children = (
72-
2C1562B4176B9F8400B4AE50 /* WebViewJavascriptBridge.js.txt */,
73+
2C3E7C441C5A890A00A1E322 /* WebViewJavascriptBridge_JS.h */,
74+
2C3E7C451C5A890A00A1E322 /* WebViewJavascriptBridge_JS.m */,
7375
2C1562A8176B9F6200B4AE50 /* WebViewJavascriptBridge.h */,
7476
2C1562A9176B9F6200B4AE50 /* WebViewJavascriptBridge.m */,
7577
0E8082DA19EDC32300479452 /* WKWebViewJavascriptBridge.m */,
@@ -188,7 +190,6 @@
188190
isa = PBXResourcesBuildPhase;
189191
buildActionMask = 2147483647;
190192
files = (
191-
2C1562B5176B9F8400B4AE50 /* WebViewJavascriptBridge.js.txt in Resources */,
192193
2CA045BF17117439006DEE8B /* InfoPlist.strings in Resources */,
193194
2CA0465C1711AC8E006DEE8B /* ExampleApp.html in Resources */,
194195
2CAB869B1727684300BD9ED1 /* Default-568h@2x.png in Resources */,
@@ -202,6 +203,7 @@
202203
isa = PBXSourcesBuildPhase;
203204
buildActionMask = 2147483647;
204205
files = (
206+
2C3E7C461C5A890A00A1E322 /* WebViewJavascriptBridge_JS.m in Sources */,
205207
2C1562C0176BA63500B4AE50 /* WebViewJavascriptBridge.m in Sources */,
206208
0E8082DB19EDC32300479452 /* WKWebViewJavascriptBridge.m in Sources */,
207209
2C45CA2C1884AD520002A4E2 /* ExampleUIWebViewController.m in Sources */,

WebViewJavascriptBridge/WKWebViewJavascriptBridge.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
+ (instancetype)bridgeForWebView:(WKWebView*)webView handler:(WVJBHandler)handler;
2121
+ (instancetype)bridgeForWebView:(WKWebView*)webView webViewDelegate:(NSObject<WKNavigationDelegate>*)webViewDelegate handler:(WVJBHandler)handler;
22-
+ (instancetype)bridgeForWebView:(WKWebView*)webView webViewDelegate:(NSObject<WKNavigationDelegate>*)webViewDelegate handler:(WVJBHandler)handler resourceBundle:(NSBundle*)bundle;
2322
+ (void)enableLogging;
2423

2524
- (void)send:(id)message;
@@ -30,6 +29,9 @@
3029
- (void)callHandler:(NSString*)handlerName data:(id)data responseCallback:(WVJBResponseCallback)responseCallback;
3130
- (void)reset;
3231

32+
// Deprecated
33+
+ (instancetype)bridgeForWebView:(WKWebView*)webView webViewDelegate:(NSObject<WKNavigationDelegate>*)webViewDelegate handler:(WVJBHandler)handler resourceBundle:(NSBundle*)bundle __attribute__((deprecated("resourceBundle is no longer required. Use bridgeForWebView:webViewDelegate:handler: instead")));
34+
3335
@end
3436

3537
#endif

WebViewJavascriptBridge/WKWebViewJavascriptBridge.m

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,16 @@ + (instancetype)bridgeForWebView:(WKWebView*)webView handler:(WVJBHandler)handle
2727
}
2828

2929
+ (instancetype)bridgeForWebView:(WKWebView*)webView webViewDelegate:(NSObject<WKNavigationDelegate>*)webViewDelegate handler:(WVJBHandler)messageHandler {
30-
return [self bridgeForWebView:webView webViewDelegate:webViewDelegate handler:messageHandler resourceBundle:nil];
31-
}
32-
33-
+ (instancetype)bridgeForWebView:(WKWebView*)webView webViewDelegate:(NSObject<WKNavigationDelegate>*)webViewDelegate handler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle
34-
{
3530
WKWebViewJavascriptBridge* bridge = [[self alloc] init];
36-
[bridge _setupInstance:webView webViewDelegate:webViewDelegate handler:messageHandler resourceBundle:bundle];
31+
[bridge _setupInstance:webView webViewDelegate:webViewDelegate handler:messageHandler];
3732
[bridge reset];
3833
return bridge;
3934
}
4035

36+
+ (instancetype)bridgeForWebView:(WKWebView*)webView webViewDelegate:(NSObject<WKNavigationDelegate>*)webViewDelegate handler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle {
37+
return [self bridgeForWebView:webView webViewDelegate:webViewDelegate handler:messageHandler];
38+
}
39+
4140
- (void)send:(id)data {
4241
[self send:data responseCallback:nil];
4342
}
@@ -80,11 +79,11 @@ - (void)dealloc {
8079
/* WKWebView Specific Internals
8180
******************************/
8281

83-
- (void) _setupInstance:(WKWebView*)webView webViewDelegate:(id<WKNavigationDelegate>)webViewDelegate handler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle{
82+
- (void) _setupInstance:(WKWebView*)webView webViewDelegate:(id<WKNavigationDelegate>)webViewDelegate handler:(WVJBHandler)messageHandler {
8483
_webView = webView;
8584
_webViewDelegate = webViewDelegate;
8685
_webView.navigationDelegate = self;
87-
_base = [[WebViewJavascriptBridgeBase alloc] initWithHandler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle];
86+
_base = [[WebViewJavascriptBridgeBase alloc] initWithHandler:(WVJBHandler)messageHandler];
8887
_base.delegate = self;
8988
}
9089

WebViewJavascriptBridge/WebViewJavascriptBridge.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727

2828
+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView handler:(WVJBHandler)handler;
2929
+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)webViewDelegate handler:(WVJBHandler)handler;
30-
+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)webViewDelegate handler:(WVJBHandler)handler resourceBundle:(NSBundle*)bundle;
3130
+ (void)enableLogging;
3231
+ (void)setLogMaxLength:(int)length;
3332

@@ -38,4 +37,7 @@
3837
- (void)callHandler:(NSString*)handlerName data:(id)data;
3938
- (void)callHandler:(NSString*)handlerName data:(id)data responseCallback:(WVJBResponseCallback)responseCallback;
4039

40+
// Deprecated
41+
+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)webViewDelegate handler:(WVJBHandler)handler resourceBundle:(NSBundle*)bundle __attribute__((deprecated("resourceBundle is no longer required. Use bridgeForWebView:webViewDelegate:handler: instead")));
42+
4143
@end

WebViewJavascriptBridge/WebViewJavascriptBridge.m

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,15 @@ + (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView handler:(WVJBHandle
3636
}
3737

3838
+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)webViewDelegate handler:(WVJBHandler)messageHandler {
39-
return [self bridgeForWebView:webView webViewDelegate:webViewDelegate handler:messageHandler resourceBundle:nil];
40-
}
41-
42-
+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)webViewDelegate handler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle
43-
{
4439
WebViewJavascriptBridge* bridge = [[self alloc] init];
45-
[bridge _platformSpecificSetup:webView webViewDelegate:webViewDelegate handler:messageHandler resourceBundle:bundle];
40+
[bridge _platformSpecificSetup:webView webViewDelegate:webViewDelegate handler:messageHandler];
4641
return bridge;
4742
}
4843

44+
+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)webViewDelegate handler:(WVJBHandler)messageHandler resourceBundle:(NSBundle *)bundle {
45+
return [self bridgeForWebView:webView webViewDelegate:webViewDelegate handler:messageHandler];
46+
}
47+
4948
- (void)send:(id)data {
5049
[self send:data responseCallback:nil];
5150
}
@@ -89,15 +88,15 @@ - (NSString*) _evaluateJavascript:(NSString*)javascriptCommand
8988
**********************************/
9089
#if defined WVJB_PLATFORM_OSX
9190

92-
- (void) _platformSpecificSetup:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)webViewDelegate handler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle{
91+
- (void) _platformSpecificSetup:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)webViewDelegate handler:(WVJBHandler)messageHandler {
9392
_webView = webView;
9493
_webViewDelegate = webViewDelegate;
9594

9695
_webView.frameLoadDelegate = self;
9796
_webView.resourceLoadDelegate = self;
9897
_webView.policyDelegate = self;
9998

100-
_base = [[WebViewJavascriptBridgeBase alloc] initWithHandler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle];
99+
_base = [[WebViewJavascriptBridgeBase alloc] initWithHandler:(WVJBHandler)messageHandler];
101100
_base.delegate = self;
102101
}
103102

@@ -174,11 +173,11 @@ - (NSURLRequest *)webView:(WebView *)webView resource:(id)identifier willSendReq
174173
**********************************/
175174
#elif defined WVJB_PLATFORM_IOS
176175

177-
- (void) _platformSpecificSetup:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(id<UIWebViewDelegate>)webViewDelegate handler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle{
176+
- (void) _platformSpecificSetup:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(id<UIWebViewDelegate>)webViewDelegate handler:(WVJBHandler)messageHandler {
178177
_webView = webView;
179178
_webView.delegate = self;
180179
_webViewDelegate = webViewDelegate;
181-
_base = [[WebViewJavascriptBridgeBase alloc] initWithHandler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle];
180+
_base = [[WebViewJavascriptBridgeBase alloc] initWithHandler:(WVJBHandler)messageHandler];
182181
_base.delegate = self;
183182
}
184183

WebViewJavascriptBridge/WebViewJavascriptBridgeBase.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ typedef NSDictionary WVJBMessage;
3030

3131
+ (void)enableLogging;
3232
+ (void)setLogMaxLength:(int)length;
33-
- (id)initWithHandler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle;
33+
- (id)initWithHandler:(WVJBHandler)messageHandler;
3434
- (void)reset;
3535
- (void)sendData:(id)data responseCallback:(WVJBResponseCallback)responseCallback handlerName:(NSString*)handlerName;
3636
- (void)flushMessageQueue:(NSString *)messageQueueString;

WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77

88
#import <Foundation/Foundation.h>
99
#import "WebViewJavascriptBridgeBase.h"
10+
#import "WebViewJavascriptBridge_JS.h"
1011

1112
@implementation WebViewJavascriptBridgeBase {
1213
id _webViewDelegate;
1314
long _uniqueId;
14-
NSBundle *_resourceBundle;
1515
}
1616

1717
static bool logging = false;
@@ -20,10 +20,8 @@ @implementation WebViewJavascriptBridgeBase {
2020
+ (void)enableLogging { logging = true; }
2121
+ (void)setLogMaxLength:(int)length { logMaxLength = length;}
2222

23-
-(id)initWithHandler:(WVJBHandler)messageHandler resourceBundle:(NSBundle*)bundle
24-
{
23+
-(id)initWithHandler:(WVJBHandler)messageHandler {
2524
self = [super init];
26-
_resourceBundle = bundle;
2725
self.messageHandler = messageHandler;
2826
self.messageHandlers = [NSMutableDictionary dictionary];
2927
self.startupMessageQueue = [NSMutableArray array];
@@ -117,10 +115,8 @@ - (void)flushMessageQueue:(NSString *)messageQueueString{
117115
}
118116

119117
- (void)injectJavascriptFile:(BOOL)shouldInject {
120-
if(shouldInject){
121-
NSBundle *bundle = _resourceBundle ? _resourceBundle : [NSBundle bundleForClass:[self class]];
122-
NSString *filePath = [bundle pathForResource:@"WebViewJavascriptBridge.js" ofType:@"txt"];
123-
NSString *js = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
118+
if (shouldInject){
119+
NSString *js = WebViewJavascriptBridge_js();
124120
[self _evaluateJavascript:js];
125121
[self dispatchStartUpMessageQueue];
126122
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#import <Foundation/Foundation.h>
2+
3+
NSString * WebViewJavascriptBridge_js();

WebViewJavascriptBridge/WebViewJavascriptBridge.js.txt renamed to WebViewJavascriptBridge/WebViewJavascriptBridge_JS.m

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
// This file contains the source for the Javascript side of the
2+
// WebViewJavascriptBridge. It is plaintext, but converted to an NSString
3+
// via some preprocessor tricks.
4+
//
5+
// Previous implementations of WebViewJavascriptBridge loaded the javascript source
6+
// from a resource. This worked fine for app developers, but library developers who
7+
// included the bridge into their library, awkwardly had to ask consumers of their
8+
// library to include the resource, violating their encapsulation. By including the
9+
// Javascript as a string resource, the encapsulation of the library is maintained.
10+
11+
#import "WebViewJavascriptBridge_JS.h"
12+
13+
NSString * WebViewJavascriptBridge_js() {
14+
#define __wvjb_js_func__(x) #x
15+
16+
// BEGIN preprocessorJSCode
17+
static NSString * preprocessorJSCode = @__wvjb_js_func__(
118
;(function() {
219
if (window.WebViewJavascriptBridge) {
320
return;
@@ -121,3 +138,8 @@ function _handleMessageFromObjC(messageJSON) {
121138
readyEvent.bridge = WebViewJavascriptBridge;
122139
doc.dispatchEvent(readyEvent);
123140
})();
141+
); // END preprocessorJSCode
142+
143+
#undef __wvjb_js_func__
144+
return preprocessorJSCode;
145+
};

0 commit comments

Comments
 (0)