我正在使用Cordova开发Android和iOS的应用程序。
页面结构如下
- 页面A(没有iframe)
- 第B页(w / iframe)
过渡
1.页面A - >第B页(前进)
2.页面A< - 页面B(由history.back()向后)
iframe显示外部网页
当它从页面B(w / iframe)返回到页面A(没有iframe)时,我必须两次调用hisotory.back()。
但是,由同一个javascript源构建的Android应用程序只需要调用history.back()一次
此外,当使用iOS的本机WebVIew(UIWebView)时,不会发生类似的问题。
这是Cordova(iOS)规范还是错误?
有没有人遇到过这个问题?
版本
Cordova 4.2(iOS平台3.8.0)
iOS 8.3
感谢。
答案 0 :(得分:0)
首先,iOS中的iframe分享他们的历史。 其次,iOS中的Cordova使用iframe作为JsToNativeBridge。
因此,在您的应用程序中,有两个iframe。 一个用于显示您的页面。 另一个用于JsToNativeBridge。 (此iframe已隐藏)
history.back的功能与这两个iframe冲突。
正在寻求一种解决方案。
在deviceready事件之后,在任何插件工作之前,执行
var exec = cordova.require('cordova/exec');
exec.setJsToNativeBridgeMode(exec.jsToNativeModes.XHR_OPTIONAL_PAYLOAD);
备注一些插件使用addEventlistener作为deviceready事件。如果你使用这样的话 插件,请尝试下一个解决方案。
另一个解决方案是修改iOS中的cordova.js。
在:
if (bridgeMode === undefined) {
bridgeMode = jsToNativeModes.IFRAME_NAV;
}
后:
if (bridgeMode === undefined) {
bridgeMode = jsToNativeModes.XHR_NO_PAYLOAD;
// bridgeMode = jsToNativeModes.IFRAME_NAV;
}
答案 1 :(得分:0)
我遇到了同样的问题,对我有用的解决方案很简单。替换:
<a data-rel="back" data-icon="back">back</a>
by
<a data-id="persistent" href="the page_before" data-transition="slide" data-icon="back"> back</a>
效果很好