Как я могу получить доступ к элементам в iframe приложения cordova WKWebView для ios?

#ios #cordova #iframe #wkwebview

#iOS #кордова #iframe #wkwebview

Вопрос:

Я хочу получить доступ к элементам нашего веб-сайта, встроенным в iframe нашего приложения для ios. У него та же проблема, что и с доступом к файлам. Ошибка безопасности: заблокировал фрейм с исходным кодом «file: //» от доступа к фрейму с перекрестным исходным кодом…

Проблема доступа к файлам решается с помощью этого плагина https://github.com/globules-io/cordova-plugin-ios-xhr . Но доступ в iframe не решается.

Как я могу получить доступ к элементам в iframe приложения cordova WKWebView для ios?

Ответ №1:

Я столкнулся с аналогичной проблемой в своих приложениях Cordova с WKWebView. Вам нужно будет запустить iframe под «тем же источником» вашего приложения. Это единственное решение, которое я нашел. Это включает в себя запись содержимого непосредственно в iframe, а не присвоение ему src=»…». Таким образом, iframe выполняется с тем же источником, что и родительский. (Все, что загружается через src="file://..." , рассматривается как уникальное происхождение в WKWebView, поэтому блокирует любой межкадровый 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 style='background-color:#eee; color:#000;'>"  
        "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);
 

Вам придется каким-то образом загружать содержимое страниц веб-сайта вне этого обходного пути, например, с помощью вызова ajax.