You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@weex.apache.org by GitBox <gi...@apache.org> on 2018/09/20 13:33:42 UTC

[GitHub] cxfeng1 closed pull request #1541: [WEEX-622][iOS] record jsservice name to context && modify white scre…

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:
users@infra.apache.org


With regards,
Apache Git Services