0

我有一段 java 脚本,它只是从网站上获取一个 ID 并将其传递给单独域上的另一个 php 脚本:

javascript 开启:

https://myspot.com

并且将要

http://theotherwebsite.edu

这或多或少是有效的,我必须使用以前的跨站点解决方案,现在似乎在 Firefox 23 和 IE10 上不被尊重。

以前的解决方案是使用这样的:

 var isIE10 = false; //this is beacuse stupid IE10 now does not work with the window.XDomainRequest
 /*@cc_on
     if (/^10/.test(@_jscript_version)) {
         isIE10 = true;
     }
 @*/
 console.log(isIE10);
 var isIE8 = window.XDomainRequest ? true : false; 

 var invocation=createCrossDomainRequest();

function createCrossDomainRequest(url, handler)
{
        var request;
        if ((isIE8) && (!isIE10)) //tried to hack my own isIE10 fix didnt work
        {
            request = new window.XDomainRequest();
        }
        else
        {
            request = new XMLHttpRequest();
        }
        return request;

}

 function callOtherDomain()
    {
        if (invocation)
        {
            if("withCredentials" in invocation) //was taking a stab in the dark with this.
            {
                invocation.onload=outputResult;
                invocation.open("GET", url, true);
                invocation.send();

            }

            else if(isIE8)
            {
                invocation.onload = outputResult;
                invocation.open("GET", url, true);
                invocation.send();
            }
            else
            {
                invocation.open('GET', url, true);
                invocation.onreadystatechange = handler;
                invocation.send();
            }
        }
        else
        {
            var text = "No Invocation TookPlace At All";
            var textNode = document.createTextNode(text);
            var textDiv = document.getElementById("textDiv");
            textDiv.appendChild(textNode);
        }
    }
function handler(evtXHR)
    {
        if (invocation.readyState == 4)
        {
            if (invocation.status == 200)
            {
                outputResult();                 
            }
            else
            {
                alert("Invocation Errors Occured " + invocation.status + " state: " + invocation.readyState);
            }
        }
    }

    function outputResult()
    {
          var response = invocation.responseText;


                    //get JSON of response
        var obj = JSON.parse(response);
        var mtype = obj.messagetype;
        var output = obj.message;
        var url = obj.url;          

        if(mtype=="error")
        {               
            parent.location=url;
        }
        else if(mtype=="warning")
        {
            var answer=confirm(output);
            if(answer)
                parent.location=url;

        }


        //var textDiv = document.getElementById("textDiv");
        //textDiv.innerHTML += response;

    }       

调用其他域();所以我不确定这里发生了什么,我在 Firefox 23 上的控制台中出现错误:

Blocked loading mixed active content "http://theotherwebsite.edu"

我知道这是因为主脚本是在 https 和 http 上加载的。但它之前并不在意。我也知道这个错误在 Firefox 的地址栏中设置了一个屏蔽,用户可以告诉它启用被阻止的内容。这对我来说不是一个可接受的解决方案。另外,如果我将我愚蠢的小 php 脚本放在 https 下,那也是我需要的证书吗?

然后 IE10 就不起作用了:

SCRIPT5: Access is denied. landing, line 64 character 421

所以我不确定我需要做什么才能让我的代码再次运行,让用户调整浏览器是不可行的,因为这是在企业范围内分布的,它是为了让他们知道根据以下内容更改密码php文件使用通过ajax从网站传递的ID访问的一些ldap条目。

我正在做一些谷歌搜索但什么也没找到,我发现的最多的是使网站我猜 CORS 兼容的 php 句柄:

<?php
 header('Access-Control-Allow-Origin: *');

我最初也实施了。所以不确定要尝试什么或下一步要看哪里?这是一个返回的简单 JSON 字符串,我可以尝试这里描述的预检方法:

http://ppe.blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx

???如果我这样做,我不确定标题应该是什么样子。

我打算发布 Firefox 23 响应标头,但它从不发出请求,因为它直接阻止了加载混合活动内容。所以我想我有两个问题要解决,一个是 javascript 存在于 https 上并调用 http ......这可能是我在 Firefox 中唯一的问题,不是 100% 确定我是否会遇到跨站点问题。

IE10 的网络请求标头永远找不到,我正在查看 IE10 中的 F12 键按下区域,在网络下,我在使用 xhr 调用加载页面之前单击开始捕获。

所以我想我在问 firefox23 和 IE10 发生了什么变化,不再让我的代码工作了?

4

1 回答 1

3

Firefox 23+ 将阻止他们所谓的“活动混合内容”。即:托管在从安全网页 (https) 请求的非安全 (http) 位置的内容。在这种情况下,“活动”本质上是指不是媒体类型的所有内容(不是图像、音频或视频资源)。这是为了防止使用非安全子请求进入安全页面的中间人攻击。

有关详细信息,请参阅 MDN 上的混合内容文章。

由于请求甚至在到达网络之前就被阻止了,因此不会有任何响应标头/数据。

不确定 IE10,但他们的文档似乎表明他们出于相同的原因阻止此类请求,并说:

不允许跨域、跨端口和混合协议请求。

于 2013-08-30T19:23:59.787 回答