Open DeCori opened 5 years ago
对,我这个项目目前是属于多web容器,底层借助的是原生容器的原生跳转方法,不兼容单web容器,单web容器一般是h5页面中重定向或者a标签等实现的页面重载,需要重新设计底层的交互,要么h5保存每层跳转地址,要么原生去保存,点击返回按钮时依次返回重载,就像浏览器一样了
其实现在的也可以实现,我在WKWebView的代理方法中已经设置了监听,左上角增加了一个按钮,h5可以通过重新设置左上角返回方法去进行页面的返回重载,由h5自己保存每层的地址
//重写导航栏左侧返回按钮方法
- (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方法来创建右上角按钮就失效了,请问你有什么好的解决方法么?
我这边简单测试goBack没有影响已导入的js,不知道你具体的h5的写法使用,原生可以尝试goBack后evaluateJavaScript方法给h5注入window层的方法,触发其他逻辑
如果只是在一个QHJSBaseWebLoader控制器下加载,而不是创建新的controller,这种情况下web的二级页面返回按键不起作用吧?