js跨域访问
同一个子域才可以javascript通信。例如:
http://www.163.com
http://mail.163.com
并修改
document.domain = '163.com';这样这2个页面之间才不会被拒绝
‘贰’ js跨域访问js
前提是你要调用dwr的js函数是普通函数而不是他那边调用后台java类的函数,否则能调但得不到结果。
‘叁’ js跨域调用如何实现
1.什么是跨域
经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题.
跨域问题是由于javascript语言安全限制中的同源策略造成的.
简单来说,同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合.
2.解决方案:
服务器端:
protectedvoidPage_Load(objectsender,EventArgse)
{
stringresult="callback({"name":"zhangsan","date":"2012-12-03"})";
Response.Clear();
Response.Write(result);
Response.End();
}
客户端:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<scripttype="text/javascript">
varresult=null;
window.onload=function(){
varscript=document.createElement("script");
script.type="text/javascript";
script.src="http://192.168.0.101/ExampleBusinessApplication.Web/web2.aspx";
varhead=document.getElementsByTagName("head")[0];
head.insertBefore(script,head.firstChild);
};
functioncallback(data){
result=data;
}
functionb_click(){
alert(result.name);
}
</script>
</head>
<body>
<inputtype="button"value="clickme!"onclick="b_click();"/>
</body>
</html>
‘肆’ javascript 跨域调用js文件问题.....
三种方法实现js跨域访问
1.基于iframe实现跨域
基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com这种特点,也就是两个页面必须属于一个基础域(例如都是xxx.com,或是xxx.com.cn),使用同一协议(例如都是 http)和同一端口(例如都是80),这样在两个页面中同时添加document.domain,就可以实现父页面调用子页面的函数,代码如下:
页面一代码:
<html>
<head>
<script>
document.domain="xx.com";
functionaa(){
alert("p");
}
</script>
</head>
<body>
<iframesrc="http://localhost:8080/cmsui/2.html"id="i">
</iframe>
<script>
document.getelementbyid('i').oncg=function(){
vard=document.getelementbyid('i').contentwindow;
d.a();
};
</script>
</body>
</html>
页面二代码:
<html>
<head>
<script>
document.domain="xx.com";
functiona(){
alert("c");
}
</script>
</head>
<body>
</body>
</html>
这时候父页面就可以调用子页面的a函数,实现js跨域访问
2.基于script标签实现跨域
script标签本身就可以访问其它域的资源,不受浏览器同源策略的限制,可以通过在页面动态创建script标签,代码如下
varscript=document.createElement('script');
script.src="http://aa.xx.com/js/*.js";
document.body.appendChild(script);
这样通过动态创建script标签就可以加载其它域的js文件,然后通过本页面就可以调用加载后js文件的函数,这样做的缺陷就是不能加载其它域的文档,只能是js文件,jsonp便是通过这种方式实现的,jsonp通过向其它域传入一个callback参数,通过其他域的后台将callback参数值和json串包装成javascript函数返回,因为是通过script标签发出的请求,浏览器会将返回来的字符串按照javascript进行解析执行,实现了域与域之间的数据传输。
jquery中对jsonp的支持也是基于此方案
3.后台代理方式
这种方式可以解决所有跨域问题,也就是将后台作为代理,每次对其它域的请求转交给本域的后台,本域的后台通过模拟http请求去访问其它域,再将返回的结果返回给前台,这样做的好处是,无论访问的是文档,还是js文件都可以实现跨域
‘伍’ JS跨域访问操作iframe代码
没太明白你的意思,如果是让iframe跟着主窗口大小走,那么只需要设置iframe的大小就可以了。
<html>
<body>
<iframe width="100%" height="100%" src="b.html" id="frm">
</iframe><br>
输入宽:<input name="myWidth"><br>
输入高:<input name="myHeight"><br>
<input type="button" value="调整大小" onClick="fun()">
</body>
</HEAD>
</HTML>
<script>
function fun(){
var myWidth = document.getElementById("myWidth").value;
var myHeight = document.getElementById("myHeight").value;
window.resizeTo(myWidth,myHeight);
}
</script>
补充:
你的意思说,A页面有多大,你的B页面就有多大,把整个屏幕撑满,是这个意思吗?
‘陆’ 什么是JS跨域访问
www..com下调用www..com/map/city 这不属于跨域
www..com下调用map..com/ 这就是属于跨域
还有端口不同也属于跨域
‘柒’ js跨域调用
通过script标签来请求,原理就是在本域内的A内生成一个JS标签,它的SRC指向请求的另外一个域的某个页面B,这个src里面通常会加一个A页面定义好的回调函数,B返回数据即可,可以直接返回调用这个回调函数,这种跨域的通信方式被称为JSONP,此方案存在的缺陷是, script的src属性完成该调用时采取的方式时get方式,如果请求时传递的字符串过大时,可能会无法正常运行。
‘捌’ javascript 跨域 问题
XMLHttpRequest2 进行跨域访问时需要服务器许可,不是任何域都接受跨域请求的。先来看一下从 Yahoo YQL 域返回的响应头(Response Header ):
HTTP/1.1200OK
Set-Cookie:AO="o=1&s=1&dnt=1";Version=1;Domain=yahoo.com;Max-Age=630720000;Expires=Sat,18-Jun-203310:07:41GMT;Path=/
Access-Control-Allow-Origin:*
Cache-Control:public,max-age=899
Content-Type:text/xml;charset=utf-8
Content-Encoding:gzip
Vary:Accept-Encoding
Date:Sun,23Jun201310:07:40GMT
注意里面有一条标识 Access-Control-Allow-Origin:* ,这就表示允许跨域访问,所以可以正常访问该域,而对于其他没有该标识的域就会出现禁止访问提示。
那么如何设置呢?如果要接受跨域访问请求,就必须在服务器端返回的资源中加入Access-Control-Allow-Origin 头标识,Access-Control-Allow-Origin 的值可以是 URL或 *,如果是 URL 则只会允许来自该 URL 的请求,* 则允许任何域的请求。比如,在 HTML 中可以设置:
<metahttp-equiv="Access-Control-Allow-Origin"content="*">
或
<metahttp-equiv="Access-Control-Allow-Origin"content="http://www..com:80">
‘玖’ js 跨域请求传递参数并跳转页面
你可以使用ajax,将数据传输到后台,判断下条件是否满足,返回信息,然后用window.href=‘’进行超链接跳转
‘拾’ 如何解决js跨域问题
解决js跨域问题有以下一种方式
使用jsonp
服务端代理
服务端设置Request Header头中Access-Control-Allow-Origin为指定可获取数据的域名