1

我将我的模块(一个 asp.net 项目)嵌入到“门户”中,该门户会为我的 url 生成一个 iframe,我知道它很糟糕,但我没有做到。
为了避免在用户使用我的 Web 项目进行迭代时在主“门户”端进行会话,门户所有者告诉我通过 javascript 从我的应用程序到门户启动心跳。
每个人都知道以这种方式保持会话是不安全的,但是“门户”在那里我无事可做。
真正的问题是我不能从我的应用程序到门户的跨域请求,因为同源策略锁定它,我找到了一个使用 jquery 的解决方案,但它需要 [heartbeat listener] 处理 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 回答