2011-10-14 17 views
1

我在一個「門戶」中嵌入我的模塊,一個asp.net項目,門戶網站爲我的url生成一個iframe,我知道它是一個垃圾,但我沒有做到。
爲了避免用戶在我的web項目中迭代時在主「門戶」結束時進行會話,門戶所有者告訴我從我的應用程序到門戶通過javascript啓動心跳。
每個人都知道以這種方式保持會話是不安全的,但'門戶'有那麼我沒有什麼可做的。
真正的問題是,我不能做我的應用程序的跨域請求門戶,因爲same origin policy鎖定它,我發現了一個解決方案使用jQuery,但它需要[心跳監聽]處理JSON。
官方jsonp網站here
有人可以幫助我嗎?
有我的腳本:crossDomain心跳不能用jquery解析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 
    ); 
} 

回答

0

你所要做的是一個明顯違反了JavaScript的同源策略的。一個好的解決方案是,門戶所有者可以爲您想要使用XHR提取的頁面設置此http頭元素(並且只有該頁面)。

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

來源:http access control

+0

感謝很多答案,但我不能改變的門戶,不能改變的代碼,不能改變配置,也許我可以把我的應用程序相同的根下的HTTP:// WWW。 theportalurl.com/myapplicationhere。 – newway

+0

@newway如果它在同一個域上,那麼你應該沒有問題,另一個解決方案是「跨域代理」。 – rook

+0

非常感謝。它不在同一個域中,但是我會向我的管理員請求它,我不會自由地把手放在服務器上,也不想要它;)然後放在同一個域中成爲最後一個獨特的可能性。 – newway