cordova应用程序(iOS)中的iframe history.back()问题

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

页面结构如下。
– 页面A(没有iframe)
– 页面B(带iframe)

转变
1.页面A – >页面B(向前)
2.页面A – 页面B(由history.back()向后)

iframe显示外部网页。
当它回到页面B(w / iframe)的页面A(没有内联框架)时,我必须调用hisotory.back()两次。
但是,由相同的JavaScript源生成的Android应用程序只需要调用history.back()一次。
另外,使用iOS的原生WebVIew(UIWebView)时,也不会出现类似的问题。

这是一个cordova(iOS)规格或错误?
有没有人遇到过这个问题?

版本
cordova4.2(iOS平台3.8.0)
iOS 8.3

谢谢。

首先,iOS中的iframe分享他们的历史。 其次,iOS中的Cordova使用iframe作为JsToNativeBridge。

因此,在您的应用程序中,有两个iframe。 一个用于显示您的网页。 另一个用于JsToNativeBridge。 (这个iframe是隐藏的)

history.back的function与这两个iframe冲突。

一个解决scheme如下。

在deviceready事件之后,在任何插件工作之前,执行该操作

var exec = cordova.require('cordova/exec'); exec.setJsToNativeBridgeMode(exec.jsToNativeModes.XHR_OPTIONAL_PAYLOAD); 

注意一些插件使用addEventlistener进行deviceready事件。 如果你使用这样的插件,请尝试下一个解决scheme。

另一种解决scheme是修改iOS中的cordova.js。

之前:

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

后:

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