我有一个页面,其中包含Iframe和来自Iframe的Javascript,可以访问父框架的功能。页面在同一台服务器上(它不是跨域脚本),我对FF和IE没有任何问题,但是当我在Chrome上使用它时,我有以下信息。
不安全的JavaScript尝试使用URL访问框架 http://samedomain:51700/irj/servlet/prt/portal/prtroot/CRMApp73.StoricoApp 来自带框架的框架 http://samedomain:51700/irj/servlet/prt/portal/prtroot/CRMApp73.CRMOProxy。 域,协议和端口必须匹配。
我该如何解决这个问题?我从谷歌搜索4小时。我希望有人可以帮助我。
编辑:代码
这是iframe页面中的JavaScript。这个JavaScript调用父框架Javascript函数“setUfficioPostale”。这就是Chrome给我“不安全访问...”错误的地方。
<script>
window.parent.setUfficioPostale(map);
</script>
这是表单提交的父框架中的Javascript。这是为了将带有隐藏参数的隐藏表单发送到iframe中加载的页面。
function onAltroUfficioClick(){
document.getElementById("hiddenParams").submit();
$('#framePosteMaps').show();
}
这是父页面中的iframe定义。
<iframe id="framePosteMaps" scrolling="no" name="framePosteMaps"></iframe>
这是具有target属性的表单,用于将参数发送到iframe页面。
<form id="hiddenParams" target="framePosteMaps" action="http://samedomain:51700/irj/servlet/prt/portal/prtroot/TestFrameRC.SimPerProxy" method="POST">
<input type="hidden" name="distanza" value="10">
<input type="hidden" name="cliente" value="Retail">
....................
</form>
答案 0 :(得分:2)
Chrome不允许您这样做。来自Iframe的代码无法访问父代码。
答案 1 :(得分:2)
首先,检查两个页面是否使用iframe的SRC attr以完全相同的方式引用,我的意思是:
http://samedomain:51700/irj/
http://samedomain:51700/irj/
因为有可能,即使它们在同一台机器上运行,其中一个iFrame也被称为:
http://localhost:51700/irj/
和另一个:
http://MachineId:51700/irj/
或任何其他组合。
您可以通过在所有现代浏览器中使用开发人员工具检查代码来检查它。
Chrome允许您调用父级的功能,如果他们在同一个域中(我每天都这样做),那么就不会有任何问题。
我使用此功能来访问子iFrame:
var getIframe = function (id) {
if ($.browser.mozilla) return document.getElementById(id).contentWindow;
return window.frames[id];
};
当你想访问父母的一个函数时,只需“pp”和“parent.yourParentFunction()”。
检查父对象的功能是否已分配给Window对象(全局命名空间)
祝你好运: - )
答案 2 :(得分:1)
父框架可能设置了与“samedomain”不同的document.domain值。 将iframe js中的document.domain属性更新为父框架中设置的值,它应该可以工作。