js怎么解决跨域

2025-11-11 04:18:02

1、下面的代码都用到了jquery,在控制台执行,没有jquery的页面参考这篇经验在控制台动态引入一下。

2、无法跨域直接请求ajax,者是浏览器为了安全对页面做出的限制,例如我们在经验页面写个ajax请求,请求百度首页的页面,控制台会报错

$.ajax({url:'//www.baidu.com'})

js怎么解决跨域

js怎么解决跨域

3、而在首页发同样的请求,则可以成功。

js怎么解决跨域

js怎么解决跨域

4、而使用jsonp的写法,则可以对不同域名的服务器发起ajax请求。

$.ajax({

    url: '//mdfm.eastmoney.com/EM_UBG_MinuteApi/Js/Get',

    data: {

        dtype: 25,

        style: 'tail',

        check: 'st',

        dtformat: 'HH:mm:ss',

        id: '0006272',

        num: 17

    },

    jsonp: "cb",

    dataType: 'jsonp',

    success: function(data) {

        console.log(data);

    }

});

js怎么解决跨域

5、而后台需要返回一个页面,把需要返回的数据写在页面上,例如java的spring框架可以这样写

  @RequestMapping(value = { "/unPush.do" })public void test(HttpServletResponse response){       writeJSONPResponse(response, "success");   }private void writeJSONPResponse(HttpServletResponse response, Object data) {   response.setContentType("text/plain");   response.setHeader("Pragma", "No-cache");   response.setHeader("Cache-Control", "no-cache");   response.setDateHeader("Expires", 0);   JSONObject resultJSON = JSONObject.fromObject(data); // 根据需要拼装json   String jsonpCallback = request.getParameter("callback");// jquery自带jsonp参数,包装数据的函数名   try (PrintWriter out = response.getWriter();) {      out.println(jsonpCallback + "(" + resultJSON.toString(1, 1) + ")");// 返回jsonp格式数据      out.flush();   } catch (IOException e) {      e.printStackTrace();   }}

js怎么解决跨域

1、首先要保证2个页面你都可以修改代码。如果是别人的页面,你不可能控制的,你能控制别人的页面说明浏览器安全出问题了。

html5增加了onmessage和postMessage方法,用于同一页面的父窗口和iframe之间通信。

在控制台的top中输入以下代码,监听iframe发给自己的消息

window.onmessage = function(e) {

    console.log("收到iframe消息,iframe域名是:" + e.origin);

    console.log("收到iframe消息,内容是:" + e.data);

}

js怎么解决跨域

2、将控制台输入框切换为页面中某个iframe的,然后运行以下代码

window.top.postMessage({

    data: 'hello'

}, '*');

可以看到父窗口输出了内容。能够互相发送数据,就能跨域完成一切功能了。

js怎么解决跨域

3、这里只是简单介绍这个方法,具体细节搜索"postMessage api"去查看。

js怎么解决跨域

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢