* [iOS] handle common javaScript context exposed method
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b1001481 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b1001481 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b1001481 Branch: refs/heads/master Commit: b1001481d367f19647b00d244673d3f6c7ee4f3f Parents: 492663a Author: acton393 <[email protected]> Authored: Tue Dec 12 14:59:36 2017 +0800 Committer: acton393 <[email protected]> Committed: Wed Dec 20 17:44:28 2017 +0800 ---------------------------------------------------------------------- .../WeexSDK/Sources/Bridge/WXBridgeContext.h | 3 + ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 82 +------------------- 2 files changed, 5 insertions(+), 80 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1001481/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h ---------------------------------------------------------------------- diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h index 8ef129f..57548bb 100644 --- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h +++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h @@ -18,6 +18,7 @@ */ #import <Foundation/Foundation.h> +#import <JavaScriptCore/JavaScriptCore.h> @class WXCallJSMethod; @class WXSDKInstance; @@ -122,4 +123,6 @@ **/ - (void)resetEnvironment; ++ (void)mountContextEnvironment:(JSContext*)context; + @end http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1001481/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m ---------------------------------------------------------------------- diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m index a89a0ac..5267dce 100644 --- a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m +++ b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m @@ -25,18 +25,14 @@ #import "WXUtility.h" #import "WXSDKEngine.h" #import "WXSDKError.h" -#import "WXMonitor.h" -#import "WXAppMonitorProtocol.h" -#import "WXHandlerFactory.h" #import <sys/utsname.h> #import <JavaScriptCore/JavaScriptCore.h> -#import "WXPolyfillSet.h" #import "JSValue+Weex.h" -#import "WXJSExceptionProtocol.h" #import "WXSDKManager.h" #import "WXExtendCallNativeManager.h" #import "WXTracingManager.h" #import "WXExceptionUtils.h" +#import "WXBridgeContext.h" #import <dlfcn.h> @@ -71,8 +67,7 @@ __weak typeof(self) weakSelf = self; - NSDictionary *data = [WXUtility getEnvironment]; - _jsContext[@"WXEnvironment"] = data; + [WXBridgeContext mountContextEnvironment:_jsContext]; _jsContext[@"setTimeout"] = ^(JSValue *function, JSValue *timeout) { // this setTimeout is used by internal logic in JS framework, normal setTimeout called by users will call WXTimerModule's method; @@ -100,82 +95,9 @@ [weakSelf triggerClearTimeout:[ret toString]]; }; - _jsContext[@"btoa"] = ^(JSValue *value ) { - NSData *nsdata = [[value toString] - dataUsingEncoding:NSUTF8StringEncoding]; - NSString *base64Encoded = [nsdata base64EncodedStringWithOptions:0]; - return base64Encoded; - }; - _jsContext[@"atob"] = ^(JSValue *value ) { - NSData *nsdataFromBase64String = [[NSData alloc] - initWithBase64EncodedString:[value toString] options:0]; - NSString *base64Decoded = [[NSString alloc] - initWithData:nsdataFromBase64String encoding:NSUTF8StringEncoding]; - return base64Decoded; - }; _jsContext[@"extendCallNative"] = ^(JSValue *value ) { return [weakSelf extendCallNative:[value toDictionary]]; }; - - _jsContext[@"nativeLog"] = ^() { - static NSDictionary *levelMap; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - levelMap = @{ - @"__ERROR": @(WXLogFlagError), - @"__WARN": @(WXLogFlagWarning), - @"__INFO": @(WXLogFlagInfo), - @"__DEBUG": @(WXLogFlagDebug), - @"__LOG": @(WXLogFlagLog) - }; - }); - NSMutableString *string = [NSMutableString string]; - [string appendString:@"jsLog: "]; - NSArray *args = [JSContext currentArguments]; - - [args enumerateObjectsUsingBlock:^(JSValue *jsVal, NSUInteger idx, BOOL *stop) { - if (idx == args.count - 1) { - NSNumber *flag = levelMap[[jsVal toString]]; - if (flag) { - if ([flag isEqualToNumber:[NSNumber numberWithInteger:WXLogFlagWarning]]) { - id<WXAppMonitorProtocol> appMonitorHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXAppMonitorProtocol)]; - if ([appMonitorHandler respondsToSelector:@selector(commitAppMonitorAlarm:monitorPoint:success:errorCode:errorMsg:arg:)]) { - [appMonitorHandler commitAppMonitorAlarm:@"weex" monitorPoint:@"jswarning" success:FALSE errorCode:@"99999" errorMsg:string arg:[WXSDKEngine topInstance].pageName]; - } - } - WX_LOG([flag unsignedIntegerValue], @"%@", string); - } else { - [string appendFormat:@"%@ ", jsVal]; - WXLogInfo(@"%@", string); - } - } - [string appendFormat:@"%@ ", jsVal ]; - }]; - }; - - _jsContext.exceptionHandler = ^(JSContext *context, JSValue *exception){ - context.exception = exception; - - WXSDKInstance *instance = [WXSDKEngine topInstance]; - NSString *bundleUrl = instance.pageName?:([instance.scriptURL absoluteString]?:@"WX_KEY_EXCEPTION_WXBRIDGE"); - NSString *errorCode = [NSString stringWithFormat:@"%d", WX_KEY_EXCEPTION_WXBRIDGE]; - NSString *message = [NSString stringWithFormat:@"[WX_KEY_EXCEPTION_WXBRIDGE] [%@:%@:%@] %@\n%@", exception[@"sourceURL"], exception[@"line"], exception[@"column"], [exception toString], [exception[@"stack"] toObject]]; - NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithObjectsAndKeys: - instance.userInfo[@"jsMainBundleStringContentLength"]?:@"",@"jsMainBundleStringContentLength", - instance.userInfo[@"jsMainBundleStringContentMd5"]?:@"",@"jsMainBundleStringContentMd5",nil]; - WXJSExceptionInfo * jsExceptionInfo = [[WXJSExceptionInfo alloc] initWithInstanceId:instance.instanceId bundleUrl:bundleUrl errorCode:errorCode functionName:@"" exception:message userInfo:userInfo]; - - [WXExceptionUtils commitCriticalExceptionRT:jsExceptionInfo]; - WX_MONITOR_FAIL(WXMTJSBridge, WX_ERR_JS_EXECUTE, message); - if (instance.onJSRuntimeException) { - instance.onJSRuntimeException(jsExceptionInfo); - } - }; - - if (WX_SYS_VERSION_LESS_THAN(@"8.0")) { - // solve iOS7 memory problem - _jsContext[@"nativeSet"] = [WXPolyfillSet class]; - } } return self; }
