zoukankan      html  css  js  c++  java
  • iOS 混合网页开发 问题

      在利用JavaScriptCore与H5交互时出现异常提示:

    This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.  This will cause an exception in a future release.

      从字面意思看,是因为在后台线程修改了UI,于是乎开始验证

    _weak typeof(self)weakSelf = self;
        
        JSContext *tContext = [weakSelf.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
        
        tContext[@"jsredirect"] = ^(){
            
            NSArray *tArgs = [JSContext currentArguments];
            JSValue *tJSValue = [tArgs firstObject];
            
            @try
            {
                NSDictionary *tActionValueDic = [tJSValue toDictionary];
                
                NSLog(@"JSValue:%@", tActionValueDic);
                
                NSString *tUrlStr = tActionValueDic[@"url"];
                
                if ([tUrlStr isEqualToString:@"chartDispose"]) {
                    [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
                    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"];
                    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitOfflineWebApplicationCacheEnabled"];
                    [[NSUserDefaults standardUserDefaults] synchronize];
                }else{
                    CGGradeJumpWebViewController *vc = [[CGGradeJumpWebViewController alloc]init];
                    vc.urlStr = tUrlStr;
                    NSLog(@"Current Thread:%@",[NSThread currentThread]);
                    dispatch_async(dispatch_get_main_queue(), ^{
                        //UI修改
                        NSLog(@"Current Thread:%@",[NSThread currentThread]);
                        [weakSelf.navigationController pushViewController:vc animated:YES];
                    });
                }
                
                
            }
            @catch (NSException *exception)
            {
                NSLog(@"exception:%@", exception);
            }
        };

    果然,在XCode7中网页交互实在后台线程中执行的(XCode6木有问题),所以在交互时修改UI要再主线程中执行,问题解决。

  • 相关阅读:
    form表单里submit的提交,如何不让其阻止ajax的调用
    前端模拟后台json 调接口
    纯前端实现搜索功能、模糊查询
    js如何获取select下拉框的value以及文本内容 并赋值
    清除表单input输入框内数据
    js动态生成的dom mouseover事件无效
    jq获取当前日期xxxx-xx-xx格式
    获取自定义属性、 data-* 的值
    媒体查询不起作用
    shell_判断语句If
  • 原文地址:https://www.cnblogs.com/pretty-guy/p/4891286.html
Copyright © 2011-2022 走看看