Я обнаружил, что могу выполнять междоменную связь со страницы на file://
и iframe, размещенную на удаленном хосте с свойством contentWindow iframe.Кордоба междоменного файла: // iframe contentwindow communication
Например, на устройстве у меня есть HTML-страницу в файл URL: //.../index.html, который загружает Кордову и содержит IFRAME:
<script type="text/javascript" src="cordova.js"></script>
<iframe id="appframe"></iframe>
На этой странице можно выполнить Javascript, что загружает IFRAME и сохранить ссылку на объект в фреймах страницы, как это:
var iframe = document.getElementById("appframe");
iframe.onload = function(){
iframe.contentWindow.cordova = window.cordova;
}
iframe.src = "http://www.example.com/appframe.html";
Теперь на странице внутри фрейма, http://www.example.com/appframe.html, я могу выполнить Cordova вызов, например:
cordova.exec(null, null, "StatusBar", "hide", []);
, и это неожиданно работает, вызывая собственный слой плагина StatusBar cordova и скрывая строку состояния.
Мой вопрос:
Это безопасно для использования или является Хак, который не будет работать в будущих версиях браузеров?
Я тестировал его на устройствах iOS 9 и Android 5.
делает это, если appframe обслуживается из файла: ///? –
Интересно. IMO это очень небезопасно, если вы не контролируете удаленный веб-сайт - когда они узнают, что вы вставляете свой код в свое приложение, они могут настроить свой код и 'cordova.exec' все, что поддерживает ваше приложение через плагин, и, возможно, с объединением с какой-то другой ошибкой, получите очень большую эскалацию привилегий.Сказав это, вам нужно явно ввести ссылку на «кордову» в iframe, чтобы это работало, поэтому это не дыра в безопасности, если вы не позволите. –
@mircoc Как и я, я также пытаюсь загрузить html-страницы (размер страниц от 5Mb до 100Mb) в iframe, но во много раз сбой приложений с ошибкой «Out of memory». Вы столкнулись с этим типом проблемы? если да, можете ли вы посоветовать мне, как это решить? – Deepika