有关所需功能类型的简短示例(仅用于示例):
http://www.indeed.hk/cmp/Calvin-Klein-Jeans-&-Calvin-Klein-Underwear/jobs/Part-Time-Sales-Associate-1643e24903d9f4c7
如果单击立即申请按钮,则显示iframe。
我在一个项目中尝试访问不同来源的iframe,例如https: //subdomain.example.com
,在原始的jsp页面上说http://www.example.com
,但是它给了我以下错误:
无法从“ HTMLIFrameElement”读取“ contentDocument”属性:阻止了起源为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的处理程序是一个SimpleFormController,位于服务器R上
我遇到了一些使用javascript直接传输数据的解决方案,但是我需要一个处理程序,因此,直接javascript重定向或iframe嵌套对我不起作用
最佳答案
谢谢詹姆斯的帮助。我终于开始工作了!
我仍然不完全了解它是如何工作的,但这是我所做的:
我不会在加载parent.jsp的同时加载iframe.jsp(位于https://sub.domain.com)。意味着,iframe的src最初没有设置。
相反,单击父级中的“ showIframe”按钮后,我将调用javascript函数来加载iframe。我收到某人的建议,以解决跨域安全问题,您必须在页面加载后通过JavaScript设置iframe的src。
其他可以探索的指针是CORS,您可以在ssl.conf或httpd.conf(Apache配置)中添加类似的参数
标头集Access-Control-Allow-Origin“ http://www.domain.com”。它基本上授予访问上述域的权限