2016-04-12 154 views
5

在我工作的Cordova應用程序中有一個iframe。問題是,當測試應用程序(模擬器和設備)時,iframe是空白的。在Android上,iframe可以很好地工作。Cordova iOS空白iframe

iframe在Angular指令中動態加載。

在該指令鏈接功能下面的代碼是用來加載和iframe,追加到該指令的元素:

var iframe = angular.element('<iframe class="widget" width="' + widgetWidth + '" height="' + widgetHeight + '"></iframe>'); 
iframe.attr('src', url); 
element.append(iframe); 

我已經使用在以下的說法也試過:

var iframe = document.createElement('iframe'); 
iframe.src = url; 

這導致類似於以下(使用Safari網絡檢查器):

<iframe class="widget" width="384" height="505" src="http://hostname/correct/uri"></iframe> 

在我的index.html文件,我有以下設置:

<meta http-equiv="Content-Security-Policy" content="script-src * 'unsafe-eval'; connect-src * 'unsafe-eval'; object-src 'self'; style-src * 'unsafe-inline';"> 

我也有我的科爾多瓦config.xml中的以下行:

<access origin="*" subdomains="true" /> 
<allow-intent href="http://*/*" /> 
<allow-intent href="https://*/*" /> 

也有在Safari網頁沒有錯誤或警告督察。

所以我的問題是,有一些技巧讓iFrames在科爾多瓦iOS應用程序中工作,我失蹤了。或者我當前的配置/代碼出了什麼問題?

我使用的是angularjs 1.5.3,並有jquery 2.2.1(在angularjs之前加載)以防萬一。

+0

經過一些進一步的測試後,我也注意到iframe的onload事件從未被觸發。以防萬一有人對此有所瞭解。 – Jan

回答

10

的問題是允許的導航標籤。所以要解決它,我只需將<allow-navigation href="*" />標籤放入項目的config.xml文件中。

我在模擬器運行時通過xcode中的輸出框來到解決方案。有一條消息,其中包含相關iframe的網址,以及有關「內部導航被拒絕」的信息。

+0

不好運,問題是一樣的。 – JimiOr2

+1

我不得不'cordova platform rm ios','cordova platform add ios'來使這個改變工作。 'cordova clean','cordova build'也可以。 – camomileCase

+0

非常完美,非常感謝 – Max

1

您是否嘗試過在Content-Security-Policy元標記中設置child-src和/或frame-ancestors?這些可能需要設置爲*還有更多限制性的內容,例如您正在使用的iframe源URL。

有基於內容的安全策略在content-security-policy.com

例這方面的信息:

<meta http-equiv="Content-Security-Policy" content="script-src * 'unsafe-eval'; child-src *; connect-src * 'unsafe-eval'; object-src 'self'; style-src * 'unsafe-inline';"> 
+0

感謝您的鏈接。從鏈接中的信息來看,似乎Safari不支持子src和框架祖先。無論如何我都試過,但沒有運氣。 – Jan