标签: JavaScript 跨域访问 http://blog.livebaby.cn
项目需求:
A域有页面a.html,其中有iframe包含B域的页面b.html,现在要通过a.html上的一个按钮,来把a.html页面上一个文本框的值传递到b.html页面的文本框。
注:这里b.html是html网页,不能接收其他网站post过来的值,所以不能用直接post的方法来传值,但是,如果接收页面是b.aspx或者b.asp 呢,那不是可以直接post了么?答案是肯定的,确实可以,但是b.asp或b.aspx必须要刷新,才可以,如何能不刷新的动态改变接收页的元素或者值呢?(IE的本地项目是可以实现跨域访问的,但是外网的跨域访问默认是被拒绝的。FireFox本地项目以及外网的跨域访问都是被拒绝的。)
项目原理:
浏览器禁止跨域数据访问,但是浏览器并没有禁止跨域跨框架的post传值。我们可以在A域,post到B域的某个页面的框架中,然后通过B域的框架页来实现本域内的数据访问。这其实是html应用中的一个小技巧,并没有用到其他高深的知识就实现了跨域的数据提交。
跨域实现方法:
在B域中添加两个页面,来实现跨域的数据访问,post.aspx和main.aspx。
页面关系如下,A域的a.html包含一个框架,框架页地址是B域的main.aspx,main.aspx是一个框架集包含两个框架,(frmMain)b.html 和(frmPost)post.aspx.
A域的a.html:
<form action="http://www.livebaby.cn/post.aspx" method="post" target="frmPost">
<input id="cmd" type="text" size="20">
<input type="submit">
</form>
<iframe src="http://www.livebabyc/main.aspx"></iframe>
B域的main.aspx:
<frameset rows="*,0" frameborder="no" border="0" framespacing="0">
<frame src="/blog/b.html" name="frmMain">
<frame src="post.aspx" name="frmPost">
</frameset>
我们先把要传递到B域的数据保存到a.html的form中,然后post到B域的post.aspx.
这时post.aspx接收到值,然后执行本域内的父框架访问b.html。
string cmd = Request.Form["cmd"];
if (null != cmd && string.Empty != cmd)
{
Response.Write("<script language=\"JavaScript\" for=\"window\" event=\"onload\"> if (parent && parent.frames[\"frmMain\"]) { 这里添加控制b.html的执行代码} </script> ");
}
不难发现,这里利用跳跃跨frame(即中间跃过了一层frame)的方法,来实现跨域的数据访问。即post到frame的子frame里面。
后记:
这个例子不过是一些特殊的情况下跨域访问的解决方案,也许对你会有所帮助。因为方法简单,应用也就有很多局限性。(不过偶倒是觉得
这样很象ajax哦,页面没有刷新,同样完成了一次服务端的数据处理^o^)。
相关网文资料:
web应用的跨域访问解决方案
做过跨越多个网站的Ajax开发的朋友都知道,如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。Ajax的跨域访问问题是现有的Ajax开发人员比较常遇到的问题。
IE对于跨域访问的处理是,弹出警告框,提醒用户。如果用户将该网站纳入可信任网站,或者调低安全级别,那么这个问题IE就不会在提醒你。
FireFox等其它非微软的浏览器遇到跨域访问,则解决方案统一是拒绝访问。
有人说,IE是主流浏览器,只要它能正常使用就好了。此言差已,IE虽然能够处理,但是是有前提的,要么用户不厌其烦地在页面弹出警告框之后点击是(点击否就不执行该Ajax调用了),要么用户将该网站纳入可信任站点。这两种做法,在企业管理系统的应用中倒是比较常见,因为系统管理员可以以行政手段保证用户的行为。但是对于互联网上的网站或者门户开发,这种做法则不行。
最近遇到了这个问题,需要在跨域访问结束之后完成使主窗口出现一些特效,搜索了一些资料,通过不断尝试以及在不同浏览器中进行兼容性测试,找到了几个可行的方案:
1、Web代理的方式。即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果。此方案可以解决现阶段所能够想到的多数跨域访问问题,但要求A网站提供Web代理的支持,因此A网站与B网站之间必须是紧密协作的,且每次交互过程,A网站的服务器负担增加,且无法代用户保存session状态。
2、on-Demand方式。MYMSN的门户就用的这种方式,不过MYMSN中不涉及跨域访问问题。动态控制script标记的生成,通过修改script标记的src属性完成对跨域页面的调用。此方案存在的缺陷是,script的src属性完成该调用时采取的方式时get方式,如果请求时传递的字符串过大时,可能会无法正常运行。不过此方案非常适合聚合类门户使用。
3、iframe方式。查看过醒来在javaeye上的一篇关于跨域访问的帖子,他提到自己已经用iframe的方式解决了跨域访问问题。数据提交跟获取,采用iframe这种方式的确可以了,但由于父窗口与子窗口之间不能交互(跨域访问的情况下,这种交互被拒绝),因此无法完成对父窗口效果的影响。
|
相关推荐
JavaScript跨域访问解决方案 在Web开发中,JavaScript的同源策略是浏览器为了保障用户安全而实施的一项重要机制。它限制了脚本只能访问与当前页面具有相同协议(如http或https)、主机名和端口号的资源。然而,在...
JavaScript跨域访问是Web开发中的常见挑战,由于浏览器的安全策略——同源策略,JavaScript通常只能访问与当前页面同源(协议、域名、端口都相同)的资源。然而,为了实现不同源之间的通信,开发者可以采取多种方法...
在IT行业中,跨域访问是Web开发中一个重要的概念,特别是在使用JavaScript、JSP、JSON以及前端库如jQuery时。本教程将详细讲解如何利用这些技术实现跨域数据交互。 首先,我们需要理解“跨域”这个术语。在浏览器的...
在Web开发的浪潮中,JavaScript跨域调试一直是困扰开发者的一个技术难题。由于浏览器的安全策略限制,JavaScript在不同源之间无法自由交互,这给开发者带来了极大的不便,尤其是在涉及到跨域资源共享(CORS)的场景...
JavaScript跨域访问解决方案详解 由于浏览器的同源策略(Same-Origin Policy),JavaScript通常只能访问与当前页面同源(协议、域名、端口均相同)的资源,以防止恶意脚本跨域窃取数据。然而,在实际开发中,我们...
ArcGIS API for JavaScript是一个强大的工具,用于在Web页面上展示地理信息系统(GIS)数据,但它的功能涉及到从服务器获取地图、服务和其他资源,这可能导致跨域访问的问题。为了解决这个问题,我们可以采用几种...
这导致了浏览器对JavaScript进行安全限制,阻止了跨域请求,除非服务器明确允许。 二、跨域问题的解决方式:CORS 1. **简单请求**:当HTTP请求满足以下条件时,被视为简单请求: - 请求方法为GET、POST或HEAD。 -...
JavaScript跨域总结 在Web开发中,由于浏览器的同源策略限制,JavaScript代码通常只能访问与自身页面协议、域名和端口完全相同的资源。这种安全机制是为了防止恶意脚本通过跨站点请求获取用户敏感信息。然而,随着...
JavaScript跨域是Web开发中一个常见的挑战,尤其是在进行Ajax请求或者使用API时。由于浏览器的安全策略,不同源的HTTP请求会被禁止,这就是所谓的"同源策略"。然而,随着Web应用的发展,跨域需求日益增加,Node.js...
JavaScript跨域问题主要源于浏览器的同源策略,这是一种安全机制,限制了JavaScript脚本只能访问与当前页面同协议、同域名、同端口的资源。当尝试从一个域名下的网页去请求另一个域名的数据时,例如通过Ajax进行...
JavaScript跨域访问解决方案 在Web开发中,由于浏览器的安全策略——同源策略(Same Origin Policy),不同源的脚本之间无法直接通信或访问彼此的资源。同源策略规定,只有当两个URL的协议、域名和端口都相同时,...
跨域访问是Web开发中一个常见的挑战,尤其是在进行Ajax异步请求时,浏览器的同源策略(Same-origin policy)会限制JavaScript从一个源获取另一个源的数据。为了解决这个问题,开发者通常采用JSONP(JSON with ...
### 如何实现Ajax跨域访问 在Web开发中,由于同源策略的限制,JavaScript只能对同源的页面进行操作,不能对不同源的页面进行请求。然而,在实际的应用场景中,经常会出现需要向不同域名下的服务器发起请求的情况。...
由于浏览器的同源策略(Same Origin Policy),JavaScript在处理AJAX(Asynchronous JavaScript And XML)请求时会受到限制,无法直接从一个域(域名、协议、端口相同)访问另一个域的数据,这就是所谓的跨域问题。...
**Ajax跨域访问解决方案** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的异步更新,提升用户体验。然而,由于浏览器的同源策略限制,Ajax请求只能向同源(协议、域名和端口相同)...
在Web开发中,由于浏览器的同源策略限制,JavaScript通常无法直接跨域访问不同域名的资源,这正是“跨域访问”问题的由来。 解决Openfire和Strophe.js的跨域问题,主要是为了克服浏览器的同源策略。同源策略是...
根据提供的文件信息,可以提炼出关于JavaScript cookie跨域访问的知识点,重点在于如何在广告推广场景中实现跨域功能。下面详细说明这些知识点: 1. **跨域访问的概念**:在Web开发中,跨域指的是一个域下的文档或...