[ 
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)

Reply via email to