h5调用原生代码 逻辑 粗略查看
void -[PSDScriptMessageHandlerProxy userContentController:didReceiveScriptMessage:](void * self, void * _cmd, void * arg2, void * arg3)
先判断 PSDBRIDGEMESSAGEHANDLER
取type queue
type 判断是 api
取msgKt
shouldCallJSAPIWithToken是1 调用@selector(flushMessageQueueWithMessage:url:)
否则记录PSD_JsApi_Call_Without_Token @selector(doLogWithLogId:params:)
@"monitor" 调用@selector(_doFlushMonitorMessageQueue:url:)
PSDBRIDGEDOMREADY 的时候
rbx = [[PSDPageEvent loadDomReadyEvent] retain];//没啥有用信息
[r15 dispatchEvent:rbx];
PSDXMLHTTPREQUESTMESSAGE 的时候
取值
var_-112 = [[r15 objectForKeyedSubscript:@"msgId"] retain];
r14 = [[r15 objectForKeyedSubscript:@"msgKt"] retain];
var_-104 = [[r15 objectForKeyedSubscript:@"val"] retain];
var_-152 = [[r15 objectForKeyedSubscript:@"type"] retain];
取msgRequestUrl 执行@"window.NebulaXMLHttpRequestMessageBridge.triggerMessageCallBack('%@','%@')"没有有用信息
后面还有记日志的方法。
void -[PSDScriptMessageHandlerProxy userContentController:didReceiveScriptMessage:](void * self, void * _cmd, void * arg2, void * arg3) {
r14 = [arg3 retain];
var_-120 = self;
r15 = [[self psdView] retain];
var_-128 = r14;
if (r15 == 0x0) goto loc_10102b936;
loc_10102b693:
rbx = [[r14 name] retain];
r12 = [rbx isEqualToString:@"PSDBRIDGEMESSAGEHANDLER"];
[rbx release];
[r15 release];
if (r12 == 0x0) goto loc_10102b93f;
loc_10102b6e5:
r14 = [[var_-128 body] retain];
r15 = [[var_-128 frameInfo] retain];
r12 = [[r15 request] retain];
rbx = [[r12 URL] retain];
var_-104 = [[rbx absoluteString] retain];
[rbx release];
[r12 release];
[r15 release];
rax = [NSDictionary class];
rsi = @selector(isKindOfClass:);
rdx = rax;
if (_objc_msgSend(r14, rsi, rdx) == 0x0) goto loc_10102bf14;
loc_10102b7a4:
var_-152 = r14;
rbx = [r14 retain];
r15 = [[rbx objectForKey:@"type"] retain];
var_-112 = [[rbx objectForKey:@"queue"] retain];
rdx = [NSString class];
rax = [r15 isKindOfClass:rdx];
var_-176 = rbx;
if (rax == 0x0) goto loc_10102bd0a;
loc_10102b827:
rdx = @"api";
if ([r15 isEqualToString:rdx] == 0x0) goto loc_10102bd0a;
loc_10102b846:
var_-160 = r15;
rdx = @"msgKt";
var_-136 = [[rbx objectForKey:rdx] retain];
rbx = [[var_-128 webView] retain];
r12 = [_PSGetTokenWithContentView(rbx) retain];
[rbx release];
rbx = [_PSDConfigurationGet() retain];
r15 = [rbx shouldCallJSAPIWithToken];
[rbx release];
if (r15 != 0x0) {
r14 = var_-136;
if ((r14 != 0x0) && (r12 != 0x0)) {
rdx = r12;
if ([r14 isEqualToString:rdx] != 0x0) {
rsi = @selector(flushMessageQueueWithMessage:url:);
rdx = var_-112;
rcx = var_-104;
_objc_msgSend(var_-120, rsi);
}
else {
var_-120 = [[PSDLogger shareInstance] retain];
var_-64 = @"logStr";
r15 = [[NSString stringWithFormat:@"msg=%@", var_-112] retain];
var_-56 = r15;
rbx = [[NSDictionary dictionaryWithObjects:&var_-56 forKeys:&var_-64 count:0x1] retain];
rsi = @selector(doLogWithLogId:params:);
rdx = @"PSD_JsApi_Call_Without_Token";
rcx = rbx;
_objc_msgSend(var_-120, rsi, rdx, rcx);
[rbx release];
[r15 release];
r14 = var_-136;
[var_-120 release];
}
}
else {
var_-120 = [[PSDLogger shareInstance] retain];
var_-64 = @"logStr";
r15 = [[NSString stringWithFormat:@"msg=%@", var_-112] retain];
var_-56 = r15;
rbx = [[NSDictionary dictionaryWithObjects:&var_-56 forKeys:&var_-64 count:0x1] retain];
rsi = @selector(doLogWithLogId:params:);
rdx = @"PSD_JsApi_Call_Without_Token";
rcx = rbx;
_objc_msgSend(var_-120, rsi, rdx, rcx);
[rbx release];
[r15 release];
r14 = var_-136;
[var_-120 release];
}
}
else {
rsi = @selector(flushMessageQueueWithMessage:url:);
rdx = var_-112;
rcx = var_-104;
_objc_msgSend(var_-120, rsi);
r14 = var_-136;
}
[r12 release];
[r14 release];
goto loc_10102beeb;
loc_10102beeb:
r14 = var_-152;
r15 = var_-160;
goto loc_10102bef9;
loc_10102bef9:
[var_-112 release];
[r15 release];
[var_-176 release];
goto loc_10102bf14;
loc_10102bf14:
[var_-104 release];
[r14 release];
goto loc_10102bf1f;
loc_10102bf1f:
r13 = var_-128;
goto loc_10102c2fc;
loc_10102c2fc:
[r13 release];
if (*___stack_chk_guard != *___stack_chk_guard) {
__stack_chk_fail();
}
return;
loc_10102bd0a:
rax = [NSString class];
rsi = @selector(isKindOfClass:);
rdx = rax;
r14 = var_-152;
if (_objc_msgSend(r15, rsi, rdx) == 0x0) goto loc_10102bef9;
loc_10102bd36:
rdx = @"monitor";
rsi = @selector(isEqualToString:);
if (_objc_msgSend(r15, rsi) == 0x0) goto loc_10102bef9;
loc_10102bd55:
var_-160 = r15;
r15 = [[var_-120 psdView] retain];
rbx = [[r15 page] retain];
r12 = [[rbx bridge] retain];
[rbx release];
[r15 release];
rsi = @selector(respondsToSelector:);
rdx = @selector(_doFlushMonitorMessageQueue:url:);
if (_objc_msgSend(r12, rsi, rdx, rcx) != 0x0) {
rsi = @selector(performSelector:withObject:withObject:);
rdx = @selector(_doFlushMonitorMessageQueue:url:);
_objc_msgSend(r12, rsi, rdx, var_-112);
}
[r12 release];
goto loc_10102beeb;
loc_10102b93f:
r13 = var_-120;
r12 = [[r13 psdView] retain];
if (r12 != 0x0) {
rbx = [[var_-128 name] retain];
r15 = [rbx isEqualToString:@"PSDBRIDGEDOMREADY"];
[rbx release];
}
else {
r15 = 0x0;
}
[r12 release];
r12 = [[r13 psdView] retain];
if (r15 == 0x0) goto loc_10102ba3a;
loc_10102b9d1:
r15 = [[r12 page] retain];
rbx = [[PSDPageEvent loadDomReadyEvent] retain];
[r15 dispatchEvent:rbx];
[rbx release];
[r15 release];
[r12 release];
goto loc_10102bf1f;
loc_10102ba3a:
r13 = var_-128;
if (r12 == 0x0) goto loc_10102bd02;
loc_10102ba47:
rbx = [[r13 name] retain];
r15 = [rbx isEqualToString:@"PSDXMLHTTPREQUESTMESSAGE"];
[rbx release];
[r12 release];
if (r15 == 0x0) goto loc_10102c2fc;
loc_10102ba99:
rbx = [[r13 body] retain];
if ([rbx isKindOfClass:[NSDictionary class]] == 0x0) goto loc_10102c2f3;
loc_10102bae4:
r15 = [[r13 webView] retain];
[r15 release];
if (r15 == 0x0) goto loc_10102c2f3;
loc_10102bb11:
var_-176 = rbx;
r15 = [rbx retain];
var_-112 = [[r15 objectForKeyedSubscript:@"msgId"] retain];
r14 = [[r15 objectForKeyedSubscript:@"msgKt"] retain];
var_-104 = [[r15 objectForKeyedSubscript:@"val"] retain];
var_-152 = [[r15 objectForKeyedSubscript:@"type"] retain];
rbx = [[r13 webView] retain];
r13 = [_PSGetTokenWithContentView(rbx) retain];
[rbx release];
var_-160 = r14;
rdx = r14;
r14 = _objc_msgSend;
r12 = var_-104;
if ([r13 isEqualToString:rdx] == 0x0) goto loc_10102c2b7;
loc_10102bbfd:
var_-136 = r13;
r12 = [(r14)(@class(PSDLogger), @selector(shareInstance), rdx) retain];
var_-80 = @"logStr";
r13 = r15;
r15 = [(r14)(@class(NSString), @selector(stringWithFormat:), @"msg=%@", r15) retain];
var_-72 = r15;
rbx = [(r14)(@class(NSDictionary), @selector(dictionaryWithObjects:forKeys:count:), &var_-72, &var_-80, 0x1) retain];
(r14)(r12, @selector(doLogWithLogId:params:), @"PSD_WK_MESSAGE_RECEIVED", rbx);
[rbx release];
[r15 release];
[r12 release];
r12 = var_-152;
if ((r14)(r12, @selector(isEqualToString:), @"FormElement") == 0x0) goto loc_10102bf28;
loc_10102bcdb:
[var_-120 handleFormData:r13];
r15 = r13;
goto loc_10102bcf2;
loc_10102bcf2:
r12 = var_-104;
r13 = var_-136;
goto loc_10102c2b7;
loc_10102c2b7:
[r13 release];
[var_-152 release];
[r12 release];
[var_-160 release];
[var_-112 release];
[r15 release];
r13 = var_-128;
rbx = var_-176;
goto loc_10102c2f3;
loc_10102c2f3:
rdi = rbx;
goto loc_10102c2f6;
loc_10102c2f6:
[rdi release];
goto loc_10102c2fc;
loc_10102bf28:
var_-168 = r13;
if ([var_-112 length] == 0x0) goto loc_10102c080;
loc_10102bf4c:
var_-144 = [[var_-168 objectForKeyedSubscript:@"msgRequestUrl"] retain];
r15 = [[PSDProxyWKCacheManager sharedInstance] retain];
[r15 addInfoWithKey:var_-112 charset:0x4 info:var_-104 dataType:r12 requestUrl:stack[2048] sourceType:stack[2049]];
rsp = (rsp - 0x10) + 0x10;
[r15 release];
r15 = [[var_-120 psdView] retain];
r13 = [[r15 contentView] retain];
rbx = [[NSString stringWithFormat:@"window.NebulaXMLHttpRequestMessageBridge.triggerMessageCallBack('%@','%@')", var_-112, var_-136] retain];
[r13 evaluateJavaScript:rbx completionHandler:^ {/* block implemented at ___78-[PSDScriptMessageHandlerProxy userContentController:didReceiveScriptMessage:]_block_invoke */ } }];
r12 = var_-104;
[rbx release];
rdi = r13;
r13 = var_-136;
[rdi release];
rdi = r15;
r15 = var_-168;
[rdi release];
[var_-144 release];
goto loc_10102c2b7;
loc_10102c080:
rax = [r12 isEqualToString:@"cookie"];
r15 = var_-168;
r12 = var_-104;
r13 = var_-136;
if (rax == 0x0) goto loc_10102c2b7;
loc_10102c0b4:
r13 = [[r15 objectForKeyedSubscript:@"cookie"] retain];
r15 = [[r15 objectForKeyedSubscript:@"url"] retain];
rax = [var_-128 webView];
rax = [rax retain];
var_-200 = rax;
rbx = [[rax URL] retain];
rdx = [NSString class];
rax = [r13 isKindOfClass:rdx];
var_-144 = r15;
var_-192 = r13;
if (((rax == 0x0) || ([r13 length] == 0x0)) || ([r15 length] == 0x0)) goto loc_10102c33b;
loc_10102c18e:
r12 = [[rbx absoluteString] retain];
if ([r12 length] == 0x0) goto loc_10102c32b;
loc_10102c1bb:
rax = [rbx absoluteString];
rax = [rax retain];
var_-184 = rbx;
rdx = @"about:blank";
r15 = [rax isEqualToString:rdx];
[rax release];
[r12 release];
COND = r15 != 0x0;
r15 = var_-144;
rbx = var_-184;
if (!COND) {
rdx = @"about:blank";
r12 = _objc_msgSend;
rbx = [[var_-128 frameInfo] retain];
rax = [rbx request];
rax = [rax retain];
r13 = rax;
r15 = [[rax URL] retain];
var_-208 = rbx;
if (r15 != 0x0) {
rbx = [(r12)(rbx, @selector(request), rdx) retain];
r12 = [(r12)(rbx, @selector(URL), rdx) retain];
[rbx release];
}
else {
r12 = [_PSDURLWithFixedString(var_-144) retain];
}
[r15 release];
[r13 release];
r13 = var_-184;
rcx = r13;
if (r12 != 0x0) {
rcx = r12;
}
rsi = @selector(handleCookieData:url:domainUrl:webview:);
r14 = var_-192;
rdx = r14;
r8 = r13;
r15 = var_-200;
_objc_msgSend(var_-120, rsi);
[r12 release];
[var_-208 release];
r12 = var_-144;
}
else {
r12 = [[PSDLogger shareInstance] retain];
var_-96 = @"logStr";
rax = [NSString stringWithFormat:@"currentPageUrl=%@^mainDomainUrl=%@", r15, rbx];
r15 = rbx;
r13 = [rax retain];
var_-88 = r13;
r8 = 0x1;
rbx = [[NSDictionary dictionaryWithObjects:&var_-88 forKeys:&var_-96 count:r8] retain];
rdx = @"PSD_WK_COOKIE_ERROR";
rsi = @selector(doLogWithLogId:params:);
rcx = rbx;
_objc_msgSend(r12, rsi, rdx, rcx);
[rbx release];
rdi = r13;
r13 = r15;
r14 = var_-192;
[rdi release];
rdi = r12;
r12 = var_-144;
[rdi release];
r15 = var_-200;
}
goto loc_10102c405;
loc_10102c405:
[r13 release];
[r15 release];
[r12 release];
[r14 release];
r15 = var_-168;
goto loc_10102bcf2;
loc_10102c32b:
[r12 release];
r15 = var_-144;
goto loc_10102c33b;
loc_10102c33b:
r12 = [[PSDLogger shareInstance] retain];
var_-96 = @"logStr";
rax = [NSString stringWithFormat:@"currentPageUrl=%@^mainDomainUrl=%@", r15, rbx];
r15 = rbx;
r13 = [rax retain];
var_-88 = r13;
r8 = 0x1;
rbx = [[NSDictionary dictionaryWithObjects:&var_-88 forKeys:&var_-96 count:r8] retain];
rdx = @"PSD_WK_COOKIE_ERROR";
rsi = @selector(doLogWithLogId:params:);
rcx = rbx;
_objc_msgSend(r12, rsi, rdx, rcx);
[rbx release];
rdi = r13;
r13 = r15;
r14 = var_-192;
[rdi release];
rdi = r12;
r12 = var_-144;
[rdi release];
r15 = var_-200;
goto loc_10102c405;
loc_10102bd02:
rdi = r12;
goto loc_10102c2f6;
loc_10102b936:
[r15 release];
goto loc_10102b93f;
}