[
https://issues.apache.org/jira/browse/WEEX-622?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16622044#comment-16622044
]
ASF GitHub Bot commented on WEEX-622:
-------------------------------------
cxfeng1 closed pull request #1541: [WEEX-622][iOS] record jsservice name to
context && modify white scre…
URL: https://github.com/apache/incubator-weex/pull/1541
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
index 873b24f2b1..c81d82176e 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
@@ -498,11 +498,17 @@ - (void)createInstance:(NSString *)instanceIdString
}
[sdkInstance.apmInstance
onStage:KEY_PAGE_STAGES_LOAD_BUNDLE_END];
+ NSDictionary* funcInfo = @{
+ @"func":@"createInstance",
+ @"arg":@"start"
+ };
+
sdkInstance.instanceJavaScriptContext.javaScriptContext[@"wxExtFuncInfo"]=
funcInfo;
if ([NSURL URLWithString:sdkInstance.pageName] ||
sdkInstance.scriptURL) {
[sdkInstance.instanceJavaScriptContext
executeJavascript:jsBundleString withSourceURL:[NSURL
URLWithString:sdkInstance.pageName]?:sdkInstance.scriptURL];
} else {
[sdkInstance.instanceJavaScriptContext
executeJavascript:jsBundleString];
}
+
sdkInstance.instanceJavaScriptContext.javaScriptContext[@"wxExtFuncInfo"] = nil;
WX_MONITOR_INSTANCE_PERF_END(WXPTJSCreateInstance,
[WXSDKManager instanceForID:instanceIdString]);
}];
}
@@ -515,8 +521,15 @@ - (void)createInstance:(NSString *)instanceIdString
} else {
args = @[instanceIdString, jsBundleString, options ?: @{}];
}
- [self _mountInstanceInfoToGlobalContext:sdkInstance];
+ NSDictionary* funcInfo = @{
+ @"func":@"createInstance",
+ @"arg":@"start",
+
@"instanceId":sdkInstance.instanceId?:@"unknownId"
+ };
+
sdkInstance.instanceJavaScriptContext.javaScriptContext[@"wxExtFuncInfo"] =
funcInfo;
[self callJSMethod:@"createInstance" args:args];
+
sdkInstance.instanceJavaScriptContext.javaScriptContext[@"wxExtFuncInfo"] = nil;
+
WX_MONITOR_INSTANCE_PERF_END(WXPTJSCreateInstance, [WXSDKManager
instanceForID:instanceIdString]);
}
}
@@ -531,21 +544,6 @@ - (BOOL) _shouldMountExtInfoToInstanceContxt
return shouldMountInstanceContextExtInfo;
}
-- (void) _mountInstanceInfoToGlobalContext:(WXSDKInstance*) instance
-{
- if (![self _shouldMountExtInfoToInstanceContxt]) {
- return;
- }
- JSContext* globalContext = self.jsBridge.javaScriptContext;
- if (!globalContext && [globalContext.name isEqualToString:@"Weex
Context"]) {
- return;
- }
- NSMutableDictionary *extInfo = [NSMutableDictionary
dictionaryWithDictionary:@{
- @"wxInstanceId":instance.instanceId?:@"unSetInstanceId"
- }];
- globalContext[@"wxInstanceExtInfo"] = extInfo;
-}
-
- (void)createInstance:(NSString *)instanceIdString
contents:(NSData *)contents
options:(NSDictionary *)options
@@ -841,12 +839,18 @@ - (void)executeJsService:(NSString *)script
withName:(NSString *)name
{
if(self.frameworkLoadFinished) {
WXAssert(script, @"param script required!");
+ NSDictionary* funcInfo = @{
+ @"func":@"executeJsService",
+ @"arg":name?:@"unsetScriptName"
+ };
+ self.jsBridge.javaScriptContext[@"wxExtFuncInfo"] = funcInfo;
[self.jsBridge executeJavascript:script];
+ self.jsBridge.javaScriptContext[@"wxExtFuncInfo"] = nil;
if ([self.jsBridge exception]) {
NSString *exception = [[self.jsBridge exception] toString];
- NSMutableString *errMsg = [NSMutableString
stringWithFormat:@"[WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE] %@",exception];
- [WXExceptionUtils
commitCriticalExceptionRT:@"WX_KEY_EXCEPTION_INVOKE" errCode:[NSString
stringWithFormat:@"%d", WX_KEY_EXCEPTION_INVOKE] function:@"" exception:errMsg
extParams:nil];
+ NSMutableString *errMsg = [NSMutableString
stringWithFormat:@"[WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE]
name:%@,arg:%@,exception :$@",name,exception];
+ [WXExceptionUtils
commitCriticalExceptionRT:@"WX_KEY_EXCEPTION_INVOKE" errCode:[NSString
stringWithFormat:@"%d", WX_KEY_EXCEPTION_INVOKE] function:@"executeJsService"
exception:errMsg extParams:nil];
WX_MONITOR_FAIL(WXMTJSService, WX_ERR_JSFRAMEWORK_EXECUTE, errMsg);
} else {
// success
@@ -1030,23 +1034,25 @@ + (void)mountContextEnvironment:(JSContext*)context
bundleUrl = @"weex-main-jsfm";
}
userInfo = [NSDictionary dictionary];
- tryFindInstanceInfoInGlobalContext = YES;
- JSValue* instanceExtInfoValue = [context
objectForKeyedSubscript:@"wxInstanceExtInfo"];
- if (nil != instanceExtInfoValue) {
- NSDictionary* instanceInfo = [instanceExtInfoValue
toDictionary];
- NSString* exceptionInstanceId = [instanceInfo
objectForKey:@"wxInstanceId"];
- if (nil != exceptionInstanceId) {
- instance = [WXSDKManager
instanceForID:exceptionInstanceId];
- }
- }
- errorCode = [NSString stringWithFormat:@"%d",
WX_KEY_EXCEPTION_EMPTY_SCREEN_JS];
}
} else {
instance = [WXSDKEngine topInstance];
}
+ NSDictionary* wxExtFuncInfo = [context[@"wxExtFuncInfo"]
toDictionary];
+ NSString* recordFunc = [wxExtFuncInfo objectForKey:@"func"];
+ NSString* recordArg = [wxExtFuncInfo objectForKey:@"arg"];
+ NSString* recordInsstanceId = [wxExtFuncInfo
objectForKey:@"instanceId"];
+ if (nil == instance) {
+ instance = [WXSDKManager instanceForID:recordInsstanceId];
+ tryFindInstanceInfoInGlobalContext = nil!= instance;
+ }
+
+ if(nil != instance && [recordFunc
isEqualToString:@"createInstance"] && !instance.apmInstance.hasAddView){
+ errorCode = [NSString stringWithFormat:@"%d",
WX_KEY_EXCEPTION_EMPTY_SCREEN_JS];
+ }
- if (instance && !tryFindInstanceInfoInGlobalContext) {
+ if (instance) {
bundleUrl = instance.pageName?:([instance.scriptURL
absoluteString]?:@"WX_KEY_EXCEPTION_WXBRIDGE");
message = [NSString
stringWithFormat:@"[WX_KEY_EXCEPTION_WXBRIDGE] [%@:%@:%@]
%@\n%@\n%@\n%@\n%@\n%@", exception[@"sourceURL"], exception[@"line"],
exception[@"column"], [exception toString], [exception[@"stack"] toObject],
instance.scriptURL.absoluteString, instance.callCreateInstanceContext?:@"",
instance.createInstanceContextResult?:@"", instance.executeRaxApiResult?:@""];
userInfo =
@{@"jsMainBundleStringContentLength":instance.userInfo[@"jsMainBundleStringContentLength"]?:@"",
@@ -1054,9 +1060,17 @@ + (void)mountContextEnvironment:(JSContext*)context
}
if (commitException) {
- WXJSExceptionInfo * jsExceptionInfo = [[WXJSExceptionInfo
alloc] initWithInstanceId:instance.instanceId bundleUrl:bundleUrl
errorCode:errorCode functionName:@"" exception:message userInfo:[userInfo
mutableCopy]];
+ NSMutableDictionary* reportInfo = [[NSMutableDictionary alloc]
initWithDictionary:[userInfo mutableCopy]];
+ [reportInfo setObject:context.name?:@"unknownContextName"
forKey:@"wxContextName"];
+
+ WXJSExceptionInfo * jsExceptionInfo = [[WXJSExceptionInfo
alloc] initWithInstanceId:instance.instanceId bundleUrl:bundleUrl
errorCode:errorCode functionName:[NSString stringWithFormat:@"func: %@
arg:%@",recordFunc,recordArg]?:@"exceptionHandler" exception:message
userInfo:reportInfo];
- [WXExceptionUtils
commitCriticalExceptionRT:jsExceptionInfo.instanceId
errCode:jsExceptionInfo.errorCode function:@"exceptionHandler"
exception:jsExceptionInfo.exception extParams:jsExceptionInfo.userInfo];
+ if (nil == instance) {
+ [WXExceptionUtils
commitCriticalExceptionRT:jsExceptionInfo];
+ }else{
+ [WXExceptionUtils
commitCriticalExceptionRT:jsExceptionInfo.instanceId
errCode:jsExceptionInfo.errorCode function:jsExceptionInfo.functionName
exception:jsExceptionInfo.exception extParams:jsExceptionInfo.userInfo];
+ }
+
WX_MONITOR_FAIL(WXMTJSBridge, WX_ERR_JS_EXECUTE, message);
if (instance.onJSRuntimeException &&
!tryFindInstanceInfoInGlobalContext) {
instance.onJSRuntimeException(jsExceptionInfo);
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> [iOS] record jsservice name to context && modify white screen check logic
> -------------------------------------------------------------------------
>
> Key: WEEX-622
> URL: https://issues.apache.org/jira/browse/WEEX-622
> Project: Weex
> Issue Type: Improvement
> Components: iOS
> Reporter: peihan
> Assignee: Adam Feng
> Priority: Major
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)