1

モジュール、asp.net プロジェクトを「ポータル」に埋め込むと、ポータルは私の URL に iframe を生成します。
ユーザーが Web プロジェクトを反復しているときにメインの「ポータル」エンドでのセッションを回避するために、ポータルの所有者は、アプリケーションからポータルへの JavaScript によるハートビートを開始するように私に言いました。
この方法でセッションを維持することは安全ではありませんが、「ポータル」があることは誰もが知っています。
本当の問題は、アプリケーションからポータルへのクロスドメイン リクエストを実行できないことです。これは、同じオリジン ポリシーによってロックされているためです。jquery を使用して解決策を見つけましたが、[ハートビート リスナー] で json を処理する必要があります。
jsonpの公式サイトはこちら
誰かが私を助けることができますか?
私のスクリプトがあります:

function startHeartbeat() 
{
    var interval = 9513575;
    window.setInterval(
         function () {
             $.ajax({
                 type: "GET",
                 cache: false,
                 async: true,
                 crossDomain: true,
                 url: "http://www.theportalurl.com",
                 dataType: 'JSONP',
                 complete:function(jqXHR, textStatus){                    
                     alert("Complete");
                 },
                 success:function(json){                    
                     alert("Success");
                 },
                 error:function(jqXHR, textStatus, errorThrown){
                     alert("Error:" + textStatus + ", detail:" + errorThrown);
                 },
            });

         }
     , interval
     );
}

@rookが私に助けを与えた後、私はこれに到達します:

function startHeartbeat(pgn) 
{
    $("body").append("<img id='heartbeat' style='width:1px; height:1px' name='heartbeat' src='http://www."+Math.random()+".org'/>");
    var interval = 350000;
    window.setInterval(
         function () {
            var rnd = Math.random();
            var url = "https://www.theportal.com/refreshsession.aspx?pgn="+pgn+"&rndv="+rnd;
            $("#heartbeat").attr("src", url);
         }
     , interval
     );
}
4

1 に答える 1

0

あなたがやろうとしているのは、JavaScript の同一生成元ポリシーに対する明らかな違反です。適切な解決策は、ポータルの所有者が、XHR で取得するページ (およびそのページのみ)に対してこの http ヘッダー要素を設定できることです。

Access-Control-Allow-Origin: http://foo.example

ソース: http アクセス制御

于 2011-10-14T20:25:42.413 に答える