我有一个包含WKWebView
的混合iOS应用,我有一个JavaScript函数callNative
可以在主线程中调用Objective C本机代码。
在我的JavaScript中,我有以下结构
modifyDOM(); // e.g. .show(), and .hide() stuff
callNative('animateWKWebViewFrame');
出于某种原因,在{/ em> animateWKWebViewFrame
完成并完全呈现之前,modifyDOM
(本机代码)被称为。 (这会引起视觉故障。)
如何在调用本机代码之前强制完全呈现DOM修改?
答案 0 :(得分:1)
我假设你使用的是jQuery,因为你的评论说modifyDOM
来电show()
和hide()
。如果是这种情况,那么您应该依赖complete
参数来提供一个函数,该函数将依次调用您的本机代码。
相关文件如下:
http://api.jquery.com/hide/#hide-duration-complete
http://api.jquery.com/show/#show-duration-complete
最后,这里有一些示例代码:
function modifyDOM()
{
someElement.show(400, function() {callNative('animateWKWebViewFrame');});
}
答案 1 :(得分:0)
如何使用另一个回调来检测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];
完成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);
}
}];
}