2015-06-22 114 views
2

我正在使用Cordova开发Android和iOS应用程序。科尔多瓦应用程序(iOS)中的iframe history.back()问题

页面结构如下。
- 页A(W/O型的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)时不会发生类似的问题。

这是一个科尔多瓦(iOS)规范或错误?
有没有人遇到过这个问题?

版本
科尔多瓦4.2(iOS平台3.8.0)
的iOS 8.3

感谢。

+1

首先:请不要你的问题拉科尔多瓦的开发者邮件列表,它只是为开发科尔多瓦。你为什么要使用iFrames? – Joerg

+0

谢谢Joerg。我很抱歉犯了一个错误。使用iframe的原因是客户的要求。当然,我们提出了InAppBrowser。但是,由于以下原因而被拒绝。 1.不要显示网站的网址。 2.使用iOS时必须能够返回到上一页。科尔多瓦不推荐使用iframe吗? – LaPlace

回答

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; 
} 
相关问题