无法访问父jsp中不同来源的iframe

时间:2014-12-15 09:52:25

标签: apache jsp iframe ssl

所需功能的快速示例(仅用于示例):

http://www.indeed.hk/cmp/Calvin-Klein-Jeans-&-Calvin-Klein-Underwear/jobs/Part-Time-Sales-Associate-1643e24903d9f4c7

如果您点击立即申请按钮,则会显示iframe。

我正在创建一个项目,我尝试在原始jsp页面https: //subdomain.example.com上访问不同来源的iframe,例如http://www.example.com,但它给了我以下错误:

  

无法阅读' contentDocument'属性来自' HTMLIFrameElement':阻止原始http://www.example.com的框架访问来源https://subdomain.example.com的框架。请求访问的帧具有" http"的协议,被访问的帧具有" https"的协议。协议必须匹配。

让我们将父jsp页面调用为parent.jsp,将iframe jsp调用为iframe.jsp。 parent.jsp在服务器S上,项目名称为xyznet
iframe.jsp在服务器R上,项目名称为xyz

以下是 parent.jsp

中的一段代码
<%
    java.util.Map model = (java.util.Map)pageContext.findAttribute("model");
%>
<html>
 <body>
 <h1> This is the parent page
    <iframe id="quick-apply-frame" name="iframe-name" src="       <%=https: //sub.domain.com/apply.html?ref=${model.x.y}" onload="quickSetParams();">
    </iframe>
<script>
 function quickSetParams() {
 $("[name=iframe-name]").contents().find("[name=iframe-param-name]").val(${model.value1}');
}
</body>
</html>

以下是 iframe.jsp

中的一段代码
<html>
<body>
<form action="xyz.html">
    <input name="iframe-parm-name" value=""/>
     <input name="iframe-parm-name2" value="${model.parm2}" />
</form>
</body>
</html>

加载iframe.jsp的Handler是位于服务器R

上的SimpleFormController

我遇到过一些使用javascript直接传输数据的解决方案,但我需要一个处理程序,因此,直接的javascript重定向或iframe嵌套对我不起作用

1 个答案:

答案 0 :(得分:0)

感谢詹姆斯的一些线索。我终于搞定了!

我仍然不完全理解它是如何工作的,但这就是我所做的:

我没有在加载parent.jsp的同时加载iframe.jsp(位于https://sub.domain.com)。意思是,最初没有设置iframe的src。  相反,我调用一个javascript函数来加载iframe一次&#34; showIframe&#34;单击父级中的按钮。我得到了一个建议,要破解跨域安全问题,你必须在页面加载后通过javascript设置iframe的src。

其他可以探索的更多指针是CORS,你可以在ssl.conf或httpd.conf中添加这样的参数(apache配置) 标题集设置Access-Control-Allow-Origin&#34; http://www.domain.com&#34; 。它基本上授予访问提到的域

的权限