2015-06-22 115 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; 
} 
相關問題