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" >

サーバーからIframeに追加する応答でjava-scriptを送信しています。これは、サーバーから送信されるjava-scriptです。

<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", "*");
%>

親の呼び出し元の「handleResponse」を呼び出すことができるJavascriptのサンプル応答:

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 に答える