Cordova app(iOS)

时间:2015-06-22 06:31:37

标签: javascript ios cordova iframe

我正在使用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

感谢。

2 个答案:

答案 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>

效果很好