js/jquery前端后端跨域兼容所有IE浏览器方案 .net \java\php思路不限语言

作者:驰坤 时间:
好久不考虑兼容了,今天一个重要的页面客户反馈过来要用IE9打开

思路是通过中转页面解决js跨域问题


示例代码使用的.net和js

//.net 后端代码
public void ProcessRequest(HttpContext context)
    {
        string oldurl = SysCommon.GetQueryStrString("oldurl");//原接口
        if (!string.IsNullOrEmpty(oldurl))
        {
            string forms = context.Request.Form.ToString();
            string[] keys = context.Request.Form.AllKeys;
            System.Text.StringBuilder str = new System.Text.StringBuilder();
            foreach (string key in keys)
                str.Append(key + "=" + context.Request.Form.GetValues(key)[0] + "&");
            Maticsoft.Common.WebClient wc = new Maticsoft.Common.WebClient();
            wc.Encoding = System.Text.Encoding.UTF8;
            string result = wc.Post(oldurl, str.ToString().TrimEnd('&'));
            context.Response.Write(result);
        }
        else context.Response.Write("oldurl is empty!");
    }
<script>
        //获取跨域URL
        function getCrossDomainPostUrl(currURL) {
            //如果是跨域才走这个里处理
            if ((currURL.indexOf("http") == 0 || currURL.indexOf("//") == 0) && currURL.indexOf(location.host) == -1) {
                var isIELower = false;
                try {
                    isIELower = navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion.split(";")[1].replace(/[ ]/g, "").replace("MSIE", "")) <= 9;
                } catch (e) { }
                if (isIELower) {
                    console.log("您的浏览器版本过低,请使用IE9及以上版本");
                    if (currURL.indexOf("//") == 0 && currURL.indexOf("bidcenter.com.cn") > 0)
                        currURL = "http:" + currURL;
                    return "CrossDomainPostUrl.ashx?oldurl=" + encodeURIComponent(currURL);
                }
            }
            return currURL;
        }
        //网站端代码
        var datas = { id: 123, name: "张生" }
        $.ajax({
            type: "POST",
            data: datas,
            url: getCrossDomainPostUrl("http://www.test.com.cn/testr.ashx"),
            dataType: "text",
            success: function (data) {
                alert(data);
            },
            error: function (e) {
                alert(e);
            }
        });
    </script>

说明: 

1.http://www.test.com.cn/testr.ashx 这个是实际要访问的跨域页面 

2.CrossDomainPostUrl.ashx 这是当前站点儿下的一个后台中转页面 


优点: 

1.兼容所有IE 

2.JS、中转页面都是公共的,所有跨域位置都可使用


缺点: 

1.如果验证来源网站的域名慎用,因为通过这个接口全都是当前域名访问了 

2.所有数据通过当前站点儿返回,会增加当前站点儿流量。 所以有优点也有缺点,自己考虑用不用吧,反正是解决了我的问题,分享 给大家。