我发现我可以通过file://
上的页面和使用iframe的contentWindow属性托管在远程主机上的iframe进行跨域通信。Cordova跨域文件:// iframe contentwindow communication
例如在设备上我的网址文件的HTML页面://.../index.html加载科尔多瓦,并包含一个iframe:
<script type="text/javascript" src="cordova.js"></script>
<iframe id="appframe"></iframe>
在这个页面上,我可以执行加载的iframe和保存对象中的iFrame网页这样一个参考的javascript:
var iframe = document.getElementById("appframe");
iframe.onload = function(){
iframe.contentWindow.cordova = window.cordova;
}
iframe.src = "http://www.example.com/appframe.html";
现在的iframe,http://www.example.com/appframe.html里面的页面上,我可以执行科尔多瓦调用,例如:
cordova.exec(null, null, "StatusBar", "hide", []);
这意外的工作,调用StatusBar科尔多瓦插件的本地层和隐藏状态栏。
我的问题是:
这是安全使用或不会在浏览器的未来版本中运行的黑客?
我在iOS 9和Android 5设备上测试过它。
如果appframe是从file:///提供的,则可以执行此项工作。 –
有趣。海事组织是非常不安全的,如果你不控制远程网站 - 当他们知道你将代码嵌入你的应用程序时,他们可以通过插件调整他们的代码和'cordova.exec'你的应用程序支持的任何东西,并可能与其他一些错误相结合,实现特权升级。话虽如此,你需要明确地将对cordova的引用注入到iframe中才能工作,所以它不是一个安全漏洞,除非你愿意。 –
@mircoc像你一样我也试图在iframe中加载html页面(页面大小从5Mb到100Mb),但是很多次应用程序崩溃时出现“内存不足”错误。你遇到过这种问题吗?如果是的话,你能指导我如何解决这个问题吗? – Deepika