Znalazłem, że mogę wykonywać międzydomenową komunikację ze strony file://
i elementu iframe hostowanego na zdalnym hoście z właściwością contentWindow elementu iframe.Kordowa plik międzydomenowy: // iframe contentwindow komunikacja
Na przykład na urządzeniu Mam stronę html w pliku URL: //.../index.html który ładuje Cordova, a zawiera iframe:
<script type="text/javascript" src="cordova.js"></script>
<iframe id="appframe"></iframe>
Na tej stronie można wykonać JavaScript, który ładuje iframe i zapisać referencję obiektu na stronie z ramkami iframe tak:
var iframe = document.getElementById("appframe");
iframe.onload = function(){
iframe.contentWindow.cordova = window.cordova;
}
iframe.src = "http://www.example.com/appframe.html";
teraz na stronie wewnątrz iframe, http://www.example.com/appframe.html, mogę wykonać połączenia Cordova, na przykład:
cordova.exec(null, null, "StatusBar", "hide", []);
i to nieoczekiwanie działa, wywołując natywną warstwę wtyczki StatusBar cordova i ukrywając pasek stanu.
Moje pytanie brzmi:
Czy to jest bezpieczne w użyciu lub jest hack, który nie będzie działać w przyszłych wersjach przeglądarek?
Testowałem to na urządzeniach z systemem iOS 9 i Android 5.
działa to, jeśli appframe jest obsługiwana z pliku: ///? –
Interesujące. IMO jest bardzo niebezpieczne, jeśli nie masz kontroli nad zdalną stroną internetową - gdy dowiedzą się, że umieścisz kod w swojej aplikacji, mogą dostosować swój kod i "cordova.exec" wszystko, co Twoja aplikacja obsługuje za pomocą wtyczki, i być może w połączeniu z innym błędem, otrzymasz naprawdę dużą eskalację uprawnień.Powiedziawszy to, musisz jawnie wprowadzić odniesienie do 'cordova' w elemencie iframe, aby to działało, więc nie jest to luka w zabezpieczeniach, chyba że na to pozwolisz. –
@mircoc Podobnie jak Ty próbuję również załadować strony HTML (rozmiar stron wynosi od 5 MB do 100 MB) w elemencie iframe, ale wielokrotnie powoduje awarię aplikacji z błędem "Brak pamięci". Czy spotkałeś się z tego typu problemem? jeśli tak, czy możesz mi doradzić, jak rozwiązać ten problem? – Deepika