quickhybrid / quickhybrid-ios

iOS原生端的实现
BSD 3-Clause "New" or "Revised" License
18 stars 14 forks source link

wkwebview返回问题 #3

Open DeCori opened 5 years ago

DeCori commented 5 years ago

如果只是在一个QHJSBaseWebLoader控制器下加载,而不是创建新的controller,这种情况下web的二级页面返回按键不起作用吧?

AnderGH commented 5 years ago

对,我这个项目目前是属于多web容器,底层借助的是原生容器的原生跳转方法,不兼容单web容器,单web容器一般是h5页面中重定向或者a标签等实现的页面重载,需要重新设计底层的交互,要么h5保存每层跳转地址,要么原生去保存,点击返回按钮时依次返回重载,就像浏览器一样了

AnderGH commented 5 years ago

其实现在的也可以实现,我在WKWebView的代理方法中已经设置了监听,左上角增加了一个按钮,h5可以通过重新设置左上角返回方法去进行页面的返回重载,由h5自己保存每层的地址

DeCori commented 5 years ago
//重写导航栏左侧返回按钮方法
- (void)backAction {
    if (self.shouldPop) {
//        [super backAction];
        //单个控制器返回
        if ( [self.wv canGoBack]) {
            [self.wv goBack];
        } else {
            [super backAction];
        }
    } else {
        if ([self.bridge containObjectForKeyInCacheDicWithModuleName:@"navigator" KeyName:@"hookBackBtn"]) {
            WVJBResponseCallback backCallback = (WVJBResponseCallback)[self.bridge objectForKeyInCacheDicWithModuleName:@"navigator" KeyName:@"hookBackBtn"];
            NSDictionary *dic = @{@"code":@1, @"msg":@"Native pop Action"};
            backCallback(dic);
        }
    }
}

我现在试着用goBack实现单web容器返回,但这样有一个问题:”WKWebView 上调用 -[WKWebView goBack], 回退到上一个页面后JS方法不会调用。”这样由h5调用”setRightBtn“的JS方法来创建右上角按钮就失效了,请问你有什么好的解决方法么?

AnderGH commented 5 years ago

我这边简单测试goBack没有影响已导入的js,不知道你具体的h5的写法使用,原生可以尝试goBack后evaluateJavaScript方法给h5注入window层的方法,触发其他逻辑