所需功能的快速示例(仅用于示例):
如果您点击立即申请按钮,则会显示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嵌套对我不起作用
答案 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; 。它基本上授予访问提到的域
的权限