Cordova app (iOS) 中的 iframe history.back() 问题
iframe history.back() issues in Cordova app (iOS)
我正在使用Cordova开发Android和iOS的应用程序。
页面结构如下。
- 页 A (无 iframe)
- 页面 B (带内嵌框架)
转换
1. 页 A -->页 B (转发)
2. 页面 A <-- 页面 B(按历史向后返回())
iframe 显示外部网页。
当它从页面B(w/iframe)返回到页面A(w/o iframe)时,我必须调用hisotory.back()两次。
但是,由相同的javascript源构建的Android应用程序只需要调用history.back()一次。
此外,当使用iOS的本机WebVIew(UIWebView)时,不会发生类似的问题。
这是Cordova(iOS)规范还是错误?
有人遇到过这个问题吗?
版本
科尔多瓦 4.2 (iOS 平台 3.8.0)
iOS 8.3
谢谢。
首先,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 作为设备就绪事件。如果您使用这样的插件,请尝试下一个解决方案。
另一种解决方案是在iOS中修改cordova.js。
以前:
if (bridgeMode === undefined) {
bridgeMode = jsToNativeModes.IFRAME_NAV;
}
后:
if (bridgeMode === undefined) {
bridgeMode = jsToNativeModes.XHR_NO_PAYLOAD;
// bridgeMode = jsToNativeModes.IFRAME_NAV;
}
我遇到了同样的问题,对我有用的解决方案是一个简单的技巧。将 :
<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>
它工作正常
- 保留动态创建的下拉列表's在事件窗口.history.back()上选择的值-JavaScript
- 当执行进入页面时,JavaScript history.back()函数是否生成HttpRequest
- 使用history.back/forward在哈希更改时重新加载页面
- GWT History.back() is not firing onValueChangeHandler
- window.history.back() 在 Chrome 中无法正常工作,在 Mozilla 中工作
- 使用 js 函数 window.history.back() 添加一个参数
- 检测页面是否通过 history.back 输入
- jquery-submit表单破坏了jswindow.history.back()
- 当使用file://协议时,我可以让history.back()函数在Chrome中工作吗
- window.history.back()不起作用
- jQuery不需要在history.back(-1)上重置DOM
- Chrome在history.back后重新加载页面
- history.back()之后的代码会发生什么
- 为什么window.history.back()会跳回两个状态
- HTML5历史api: window.history.back()丢失history.state
- window.history.back(),返回false;“不能在IE11中工作
- History.back()不更新位置.在Chrome/FireFox中
- window.history.back()在IE浏览器的Iframe中
- history.back()不能在Chrome中与预期的HTML5历史API一起工作
- history.back() -如果不存在历史记录,如何设置默认值