Skip to content

Commit

Permalink
Native call WebView's interface
Browse files Browse the repository at this point in the history
  • Loading branch information
lincode committed Oct 24, 2016
1 parent ec2db10 commit e41ca29
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 8 deletions.
16 changes: 12 additions & 4 deletions Rexxar/Core/RXRViewController.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,14 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void)onPageInvisible;

/**
* 调用 WebView 的一个 JavaScript 函数,并传入一个 json 串作为参数。
*
* @param function 调用的函数。
* @param jsonParameter 传递的参数,json 串。
*/
- (nullable NSString *)callJavaScript:(NSString *)function jsonParameter:(nullable NSString *)jsonParameter;

@end


Expand All @@ -87,16 +95,16 @@ NS_ASSUME_NONNULL_BEGIN
+ (void)updateRouteFilesWithCompletion:(nullable void (^)(BOOL success))completion;

/**
* 判断存在对应于 uri 的 route 信息
* 判断路由表是否存在对应于 uri 的 route 信息
*
* @param uri 待判断的 uri
* @param uri 待判断的 uri
*/
+ (BOOL)isRouteExistForURI:(NSURL *)uri;

/**
* 判断存在对应于 uri 的 route 信息
* 判断本地(缓存,或预置资源中)是否已经下载了存在对应于 uri 的 route 信息的资源。
*
* @param uri 待判断的 uri
* @param uri 待判断的 uri
*/
+ (BOOL)isLocalRouteFileExistForURI:(NSURL *)uri;

Expand Down
29 changes: 25 additions & 4 deletions Rexxar/Core/RXRViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -104,18 +104,39 @@ - (void)reloadWebView
}
}

#pragma mark - Native Call WebView JavaScript interfaces.

- (void)onPageVisible
{
// Call the WebView's visiblity change hook for javascript.
NSString *result = [_webView stringByEvaluatingJavaScriptFromString:@"window.Rexxar.Lifecycle.onPageVisible()"];
RXRDebugLog(@"window.Rexxar.Lifecycle.onPageVisible: %@", result);
[self callJavaScript:@"window.Rexxar.Lifecycle.onPageVisible" jsonParameter:nil];
}

- (void)onPageInvisible
{
// Call the WebView's visiblity change hook for javascript.
NSString *result = [_webView stringByEvaluatingJavaScriptFromString:@"window.Rexxar.Lifecycle.onPageInvisible()"];
RXRDebugLog(@"window.Rexxar.Lifecycle.onPageInvisible: %@", result);
[self callJavaScript:@"window.Rexxar.Lifecycle.onPageInvisible" jsonParameter:nil];
}

- (NSString *)callJavaScript:(NSString *)function jsonParameter:(NSString *)jsonParameter
{
NSString *jsCall;
if (jsonParameter) {
jsonParameter = [jsonParameter stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];
jsonParameter = [jsonParameter stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
jsonParameter = [jsonParameter stringByReplacingOccurrencesOfString:@"\'" withString:@"\\\'"];
jsonParameter = [jsonParameter stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];
jsonParameter = [jsonParameter stringByReplacingOccurrencesOfString:@"\r" withString:@"\\r"];
jsonParameter = [jsonParameter stringByReplacingOccurrencesOfString:@"\f" withString:@"\\f"];
jsonParameter = [jsonParameter stringByReplacingOccurrencesOfString:@"\u2028" withString:@"\\u2028"];
jsonParameter = [jsonParameter stringByReplacingOccurrencesOfString:@"\u2029" withString:@"\\u2029"];
jsCall = [NSString stringWithFormat:@"%@('%@')", function, jsonParameter];
} else {
jsCall = [NSString stringWithFormat:@"%@()", function];
}
NSString *result = [_webView stringByEvaluatingJavaScriptFromString:jsCall];
RXRDebugLog(@"jsCall: function:%@, parameter %@, result: %@", function, jsonParameter, result);
return result;
}

#pragma mark - UIWebViewDelegate's method
Expand Down

0 comments on commit e41ca29

Please sign in to comment.