根据Apache Cordova博客,使用WKWebView可能无法使用iframe。 (https://cordova.apache.org/news/2018/08/01/future-cordova-ios-webview.html)
我在App Store中有一个Cordova应用程序,该应用程序非常依赖iframe。由于UIWebView可能会在iOS 13中删除,是否有办法让iframe使用WKWebView工作?
这是我到目前为止所做的:
我尝试使用Ionic WebView插件(https://github.com/ionic-team/cordova-plugin-ionic-webview),尽管它适用于我的应用程序的某些部分,但不适用于iframe页面。具体来说,我正在获取Access-Control-Allow-Origin标头包含无效值'null'。我没有使用UIWebView收到此错误。
答案 0 :(得分:0)
将此添加到您的Cordova config.xml
<allow-navigation href="http://*.yourdomain.com/*" />
这将允许您的HTML页面(无论是iframe中的根文档还是子文档)从本地主机重定向到远程URL。
答案 1 :(得分:0)
将此添加到您的config.xml中
<allow-navigation href="*" />
然后构建您的ios平台
答案 2 :(得分:0)
我在Cordova应用程序中也遇到了这个问题,并且找到了解决方法。它涉及将内容直接写入iframe,而不是给它src =“ ...”。这样一来,iframe就会与父代的来源相同。
(iframe确实可以在WkWebView中工作;只是通过src="file://..."
加载的所有内容(例如所有本地应用程序文件)都被视为唯一来源,因此倾向于破坏任何跨框架JavaScript。)
function frameEl_injectHtml(frameEl, injectHtml) {
// frameEl must exist in DOM before its contentWindow is accessible.
if (!frameEl.contentWindow) { alert("frameInjectHtml() but frameEl not (yet or anymore) in DOM."); return; }
frameEl.contentWindow.document.open('text/htmlreplace');
frameEl.contentWindow.document.write(injectHtml);
frameEl.contentWindow.document.close();
}
// Create <frame>, insert into DOM, and inject content.
var frameHtml = "<html><head></head>" +
"<body>" +
"iframe body" +
"<script>window.parent.alert('iframe even same-origin as parent.');</script>" +
"</body></html>";
var frameEl = document.createElement('iframe');
frameEl.src = "about:blank";
document.body.appendChild(frameEl);
frameEl_injectHtml(frameEl, frameHtml);