现在的位置: 首页 > 综合 > 正文

解决跨域访问的问题

2018年05月21日 ⁄ 综合 ⁄ 共 1032字 ⁄ 字号 评论关闭

      前段时间在做一项目时,需求是这样的,在我们开发的系统中引用其它系统(这里称为x应用)的几个模块,x应用只需提供用户名和密码是可以访问的。这就涉及到了跨域访问的问题了。

      需要在登陆我们系统的时候也得同时登陆x应用。ajax方式是行不通的,没法进行跨域访问。那就想其它的办法,以前做过无刷新上传文件的例子。所以就想这么做,在登陆我们系统后,在一个页面中建一个隐藏的form和iframe。form中有x应用的登陆用户名和密码。在form提交时候把提交对象设置为该iframe(属性为target)。改完之后发现有问题。ie中无法登陆x应用。其它浏览器如chrome、firefox浏览器是可以的,而且在ie中,如果访问过一次x应用,再登陆时也是可以的。google了一下,知道了其中的原因,是因为ie中提交给iframe时,x应用发回的cookie是浏览器是不接收的(或服务器没有发回?)。google了一下,发现可以设置x应用中的jsp(如果是jee)就可以解决此问题。这里是该方法的链接地址。

 <%     
   response.setHeader("P3P","CP=CAO PSA OUR");     
  %>  

      但不能随便改别人的应用吧,如果x应用是自己开发的,就好说了。如果是其它公司可就不那么容易了。基于在ie中,如果访问过一次x应用,再登陆时也是可以的这种现在象,另一种解决方法就出来了。就是把form中提交的对象改为一个弹出页面。问题就解决了。代码如下所示:

		<form style="display:none" target="" name="fm" method="post" action="x应用的登陆地址">
			姓名:<input type="text" name="LoginName" value="administrator"><br>
			密码:<input type="text" name="LoginPassword" value="administrator"><br>
		</form>

function login(){
				
	var openers = window.open("","test_open");
	if(openers == null) {
		alert("请允许本站点弹出窗口,否则部分功能无法正常使用!");
		return;
	}
	fm.target = "openers";
	fm.submit();
	setTimeout(function(){
		openers.close();
	},1000);
	
}

抱歉!评论已关闭.