Ran*_*lue 6 javascript objective-c ios hybrid-mobile-app wkwebview
我有一个混合iOS应用程序,其中包含一个WKWebView,我有一个JavaScript函数callNative可以在主线程中调用Objective C本机代码.
在我的JavaScript中,我有以下结构
modifyDOM(); // e.g. .show(), and .hide() stuff
callNative('animateWKWebViewFrame');
Run Code Online (Sandbox Code Playgroud)
出于某种原因,animateWKWebViewFrame(本机代码)在 modifyDOM完成之前被调用并完全呈现.(这会导致视觉故障.)
在调用本机代码之前,如何强制完全呈现DOM修改?
如何进行另一个回调来检测modifyDOM()函数?
// alloc webview
WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
[theConfiguration.userContentController addScriptMessageHandler:self name:@"interOp"];
self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 0, 0) configuration:theConfiguration];
Run Code Online (Sandbox Code Playgroud)
一旦你的modifyDOM()函数完成,你可以调用“interOp”回调,然后你可以用任何想要的回调initiate()并调用animateWKWebViewFrame
- (void)userContentController:(WKUserContentController *)userContentController
didReceiveScriptMessage:(WKScriptMessage *)message {
NSDictionary *sentData = (NSDictionary*)message.body;
NSString* command = sentData[@"command"];
LOG(@"[userContentController] command(%@)", command);
if ( [command isEqualToString:@"DOMReady"] ) {
// defining a JavaScript function
NSString *jsFunctionText = @"Initiate({"
"command:animateWKWebViewFrame"
"});";
[self.webView evaluateJavaScript:jsFunctionText completionHandler:^(id object, NSError * err) {
if ( err ) {
LOG(@"[evaluateJavaScript] error(%@)", err);
}
}];
}
Run Code Online (Sandbox Code Playgroud)