iframe是否可以在Cordova的WKWebView中使用?

时间:2019-01-31 21:15:20

标签: ios cordova iframe uiwebview wkwebview

根据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收到此错误。

3 个答案:

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