`

项目中JS跨域解决方案

 
阅读更多

问题:(由下描述可知,针对JS/AJAX的操作会存在跨域限制,而对FORM没限制)

  跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不可避免的需要进行跨域操作,所以跨域能力也算是前端工程师的基本功之一。

 

我接触的项目中使用到的跨域解决方案如下:

一、使用剪切板(由于操作起来不友好,所以这种方案不建议)
 alert(window.clipboardData.getData("text"));
 window.clipboardData.setData("text","txt");


二、JSONP(适合于前后端交互,如帐管侧的JSP访问CRM侧的WEB层)FORM+POST没问题,AJAX+POST有问题(需要用该方案)

CRM侧WEB代码为:

public void getPrintButtonForJsonp(HttpServletRequest request, HttpServletResponse response) throws Exception {
     String callback = request.getParameter("callback");   
     ...;
     response.setCharacterEncoding("GBK");
     response.setContentType("text/html;charset=GBK");
     response.getWriter().print(callback+"({returnInvoice:{status:'0',message:'findNoInvoice'}});");   
}

  帐管侧 前台调用方法为:getPrintButtonForJsonp

  $.ajax({
        url: 'http://localhost:8080/....ReportAction?action=getPrintButtonForJsonp&callback=?',
        dataType: 'jsonp',
        global: false,
        success: function(json) {
          var invoiceInfo=json.returnInvoice;
       if(invoiceInfo.status==1){
        	//成功
       }else{
        	alert('调用失败!'+invoiceInfo.message);
       }
        },
        error: function(json) {
        }
     });

 
三、使用IFRAME,这种方法使用的非常频繁【用于查询头,前前交互】

跨域原理图

应用场景:
WEB应用1通过弹出窗口形式调用WEB应用2的页面,WEB应用2通过window.returnValue返回值给WEB应用1
准备工作:WEB应用1(调用方)

test.jsp(功能使用页面)

<input type="button" onclick="selectInsAddress()" name="" value="点击">
<script type="text/javascript">
 function selectInsAddress(){
  var result = window.showModalDialog("http://localhost:8080/tt/KuaYuFrame.jsp","org","scroll:yes;resizable:no;status:no;dialogHeight:695px;dialogWidth:800px");
  alert("拿到"+result);
 }
</script>

 KuaYuFrame.jsp(跨域页面,此页面可供该应用其它功能共享)

<script type="text/javascript">
function init(){
 var url="http://10.1.21.88:8080/crm/boss/customer/cust/queryCommonCustForCallBack.jsp?callBackUrl=query_boss_customer_callback.jsp";
 pbossIframe.location=url;
}
function callBack(param){
 window.returnValue=param;
 window.self.close();
}
</script>
</head>
<body onload="init()">
<iframe id="pbossIframe" src=""  height="620px" width="959px" marginheight="0" marginwidth="0" ></iframe>
</body>

 

KuaYucallback.jsp(供目标应用回调)

<%
    String custId = request.getParameter("returnValue");
%>
<script type="text/javascript">
function comeBack(){
    parent.parent.callBack("<%=custId%>");
}
</script>
</head>
<body onload="comeBack()">
</body>

 

准备工作:WEB应用2(被调用方)
queryCommonCust.jsp

<iframe id="wangtlIframe" src=""  height="" width="" marginheight="0" marginwidth="0" style="visibility: hidden;"></iframe>
function submit_callBackUrl(val)
{ //val为待返回值
 wangtlIframe.location="http://localhost:8080/tt/<%=callBackUrl%>?returnValue="+val;
} 

 

原理解析:
其中调用方的test.jsp为功能页面,通过弹出窗口打开自己域下KuaYuFrame.jsp,其内嵌目标域下的目标功能页面queryCommonCust.jsp,其待事成后会内嵌自己域下的KuaYucallback.jsp,
其会通过parent.parent调到自己域的方法。

0
1
分享到:
评论

相关推荐

    js跨域解决方案

    1. **JSONP(JSON with Padding)**:JSONP是一种早期的跨域解决方案,它依赖于`&lt;script&gt;`标签不受同源策略限制的特点。通过动态创建`&lt;script&gt;`标签,设置其`src`属性为提供服务的服务器接口,并由服务器返回一个包裹...

    js跨域访问解决方案总结

    另一种常见的跨域解决方案是使用动态插入`&lt;script&gt;`标签的方法。这种方法的原理是利用了浏览器允许动态加载JavaScript文件的特点,从而绕过同源策略的限制。 具体步骤如下: 1. 在前端页面中动态创建一个`&lt;script&gt;...

    解决JS跨域访问IFrame的解决方案

    面对这样的问题,我们可以采用以下几种跨域解决方案: 1. **CORS(Cross-Origin Resource Sharing)**:服务器可以通过设置响应头`Access-Control-Allow-Origin`来允许特定的源进行跨域请求。例如,服务器端可以在...

    JQuery跨域访问解决方案

    JQuery的跨域解决方案主要依赖于JSONP(JSON with Padding)技术。JSONP是一种绕过同源策略的方式,它利用HTML中的`&lt;script&gt;`标签没有同源策略限制的特点。当jQuery使用`dataType: 'jsonp'`时,它实际上是在做以下几...

    Javascript跨域访问解决方案

    JSONP是一种较早的跨域解决方案,它利用了浏览器允许`&lt;script&gt;`标签跨域加载资源的特性。通过动态创建`&lt;script&gt;`标签,并指定其`src`属性为一个返回JSON数据的函数调用,服务器将数据包裹在函数调用中返回,客户端...

    js 跨域解决方案

    本文将深入探讨JavaScript跨域问题及其解决方案,以帮助开发者理解和应对这一问题。 首先,了解同源策略是解决问题的关键。同源策略是浏览器为了保障用户数据安全而实施的一种机制,它禁止了一个源的文档或脚本获取...

    Javascript跨域和Ajax跨域解决方案

    JavaScript跨域和Ajax跨域是Web开发中常见的问题,尤其在进行前后端分离或API调用时,由于浏览器的同源策略限制,不同域名、协议或端口的资源请求会被阻止,这就是所谓的“跨域”。本文将深入探讨JavaScript和Ajax...

    MVC中跨域解决方案

    4. JSONP(JSON with Padding):这是一种早期的跨域解决方案,适用于只支持GET请求的API。它通过动态创建`&lt;script&gt;`标签来实现跨域请求。然而,JSONP不提供安全性,只适用于简单请求,且不支持HTTP的其他方法和头。...

    js跨域问题解决方案.

    JavaScript跨域问题,是Web开发中常见的一个挑战,由于浏览器的同源策略限制,JavaScript无法直接访问不同源的资源,这在实现某些功能时会带来不便。本文将深入探讨JavaScript跨域问题的原因、影响以及多种解决方案...

    arcgis api for javascript跨域处理方案

    除了资源代理,还可以使用其他跨域解决方案: - CORS(跨源资源共享):服务器端可以设置CORS头(如`Access-Control-Allow-Origin`),允许特定的源进行跨域请求。这种方法需要服务器端的支持,可能不适用于所有...

    Spring 跨域解决方案官方 demo

    在现代Web开发中,跨域资源共享(CORS)是一个重要的概念,它允许...总之,Spring提供的CORS解决方案让开发者能够轻松处理跨域请求,同时保持应用的安全性。理解并熟练运用这些知识,对于构建现代化的Web应用至关重要。

    跨域请求解决方案源代码(JSONP,CORS)

    这个文件可能包含了创建XMLHttpRequest对象、设置请求头、处理响应等内容的JavaScript代码,用于演示如何在实际项目中应用这些跨域解决方案。开发者可以通过查看和运行这些代码来加深对JSONP和CORS的理解,并在自己...

    跨域访问解决方案,关于跨域访问cookie的资料

    ### 跨域访问解决方案与Cookie处理 在现代Web开发中,跨域问题一直是困扰开发者的一大难题。当浏览器出于安全考虑阻止不同源之间的数据交互时,跨域问题便产生了。为了解决这一问题,并确保在跨域场景下可以正确地...

    xmlhttp跨域解决方案

    为了解决这一问题,我们可以采用多种跨域解决方案,其中一种是通过设置代理服务器。 **一、什么是同源策略** 同源策略是浏览器为了保护用户安全而实施的一种安全策略,它规定浏览器只允许加载来自相同协议、域名和...

    Ajax跨域访问解决方案

    JSONP是一种早期的跨域解决方案,它是通过动态创建`&lt;script&gt;`标签来加载数据的。因为`&lt;script&gt;`标签不受同源策略限制,可以通过`src`属性指向提供JSON数据的外部服务。服务端返回的数据是一个JavaScript函数调用,...

    js跨域解决方案.docx

    ### js跨域解决方案 #### 一、问题描述与背景 在网页开发中,经常会遇到需要一个主页面通过`iframe`动态加载子页面的情况,并且希望根据子页面的内容自动调整`iframe`的高度,以达到视觉上的无缝对接。然而,当...

    前端跨域解决方案

    前端跨域解决方案,jsonp和cros两种解决方式。我们发现,Web页面上调用js文件时不受是否跨域的影响,凡是拥有"src"这个属性的标签都拥有跨域的能力,比如[removed]、、&lt;iframe&gt;。那就是说如果要跨域访问数据,...

    JS跨域访问解决方案总结

    JavaScript跨域访问解决方案 在Web开发中,由于浏览器的安全策略——同源策略(Same Origin Policy),不同源的脚本之间无法直接通信或访问彼此的资源。同源策略规定,只有当两个URL的协议、域名和端口都相同时,...

    arcgis js跨域解决策略

    在GIS(地理信息系统)开发中,ArcGIS JavaScript API(arcgis js)是Esri公司提供的一款...不过,需要注意的是,跨域问题的解决方案应根据项目需求和安全性考虑进行选择,确保既能满足功能需求,又能保障数据安全。

    JS跨域访问解决方案总结.pdf

    标题《JS跨域访问解决方案总结.pdf》指明文档的核心内容是关于JavaScript跨域访问问题的解决方法。跨域访问问题是指由于浏览器的同源策略限制,网页中JavaScript代码出于安全原因不能访问另一个源(域名、协议或端口...

Global site tag (gtag.js) - Google Analytics