javascript - Cordova 应用程序 (iOS) 中的 iframe history.back() 问题

标签 javascript ios cordova iframe

我正在使用 Cordova 开发 Android 和 iOS 的应用程序。

页面结构如下。
- 页面 A(无 iframe)
- 页面 B(带 iframe)

过渡
1. A页--> B页(前进)
2. 页面 A <-- 页面 B(由 history.back() 向后)

iframe 显示外部网页。
当它从页面 B(带 iframe)返回页面 A(不带 iframe)时,我必须调用 hisotory.back() 两次。
但是,由相同 javascript 源构建的 Android 应用程序只需调用 history.back() 一次。
另外,使用iOS原生的WebVIew(UIWebView)时也不会出现类似的问题。

这是 Cordova(iOS) 规范还是错误?
有没有人遇到过这个问题?

版本
Cordova 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 来处理 deviceready 事件。如果你使用这样的
插件,请尝试下一个解决方案。

另一个解决方案是修改 iOS 中的 cordova.js。

前:
if (bridgeMode === undefined) {
    bridgeMode = jsToNativeModes.IFRAME_NAV;   
}

后:
if (bridgeMode === undefined) {
    bridgeMode = jsToNativeModes.XHR_NO_PAYLOAD;
    // bridgeMode = jsToNativeModes.IFRAME_NAV;
}

关于javascript - Cordova 应用程序 (iOS) 中的 iframe history.back() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30973368/

相关文章:

javascript - 三.js |将matrixAutoUpdate = false应用于场景中的所有网格

XCode 组件中未列出 iOS 11.2.2 模拟器

ios - 应用程序:didFinishLaunchingWithOptions: method getting called on app crash

Cordova PushPlugin 注册出现错误

javascript - 甚至跨浏览器逐一执行测试

javascript - 在 html 中附加一个函数

javascript - 从 javascript 中追加到表中的输入类型获取值

ios - 如何从 Collection View 中的不可见单元格中删除自定义 View

jquery - 输入类型 ="Range"未在 PhoneGap IOS 应用程序中刷新

angularjs - PhoneGap + Angular + IOS = ng-show 在屏幕上闪烁内容