0

我知道这是跨浏览器通信或同源策略的问题,浏览器不允许此类通信。

我需要解决这个用例。我在 HTTP 中有一个父页面,从那里我将表单提交到 HTTPS,我的要求是不要离开页面并且表单在覆盖中打开。

这是我当前的 JSP 设置

<form:form action="https://localhost:9002/myApp/springSecurity/login" class="login-form error-info"  id="loginForm"  method="post" commandName="loginForm" target="guestFrame">

 <iframe width="0" frameborder="0" scrolling="no" name="guestFrame" >

从服务器我在响应中发送 java 脚本以附加到 Iframe 上,这是从服务器发送的 java 脚本

<html><body>"+ "<script type=\"text/javascript\">parent.handleResponse('error',securityLoginStatus.getLoginFailedException());</script>"+ "</body></html>")

我已经在父窗口中定义了一个方法,handle-response但是我在浏览器中遇到了以下错误

Permission denied to access property 'handleResponse'

我什至尝试过parent.wwindow.handleResponse但得到同样的错误。有什么办法可以从 iframe 与父窗口通信?

4

2 回答 2

0

http://localhost:9002正如您之前所说,除非 html 来源和命运都在域下,否则无法避免交叉来源权限被拒绝。

为方便起见,我建议使用带有 javascript/json/jsonp 文档的 http 通信。你可以尝试 jQuery 类似的东西:

<script type="text/javascript">
function sendPost () {
    $.ajax({
      type: 'POST',
      url: 'https://localhost:9002/myApp/springSecurity/login',
      data: $("#guestFrame").serialize(),
      error: function(data, status) {
        // alert('Error ' + status);
      }
    });
}
function handleResponse(obj) {
    if (obj.type==="error") {
        alert("Error: " + obj.mssg);
    }
}
</script>

<form ...>
 ...
 <input type="submit" value="send" onclick="sendPost();return(false)"/>
</form>

并且为了避免 CORS 限制,https://localhost:9002/myApp/springSecurity/loginhtml 响应必须是 javascript 代码并包含以下标头:

<% 
response.setHeader("Content-type", "application/x-javascript");
response.setHeader("Access-Control-Allow-Origin", "*");
%>

Javascript 示例响应将能够调用其父调用者的“handleResponse”:

handleResponse({'type':'error', 'mssg': 'your_login_failed_exception'});
于 2012-06-20T11:41:02.250 回答
0

您还可以使用http://easyxdm.net/wp/等框架进行跨域调用

于 2013-02-27T21:49:39.183 回答