gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:32:39 32 4
gpt4 key购买 nike

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

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com