#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.