首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

跨域访问有关问题

2012-11-16 
跨域访问问题????? 最近开发的模块需要用到跨域访问的方式,本来想可能会有跨域直接使用JavaScript读取页面

跨域访问问题

????? 最近开发的模块需要用到跨域访问的方式,本来想可能会有跨域直接使用JavaScript读取页面内容的方法,结果Google了几天,没有发现有相关的解决方案。暂时可以下个结论:跨域访问时,不能直接在两个窗口之间读取数据(假如被读取窗口是直接返回数据的除外)。比如有窗口A和B,B窗口有一个<input>元素,直接从A窗口不能读取这个元素的value值。目前的结论是如此,假如哪位大牛不小心闲逛进来,发现我的结论是错误的,请一定给我留言指正我的错误。

????? 跨域访问解决方案主要有以下几种。

????? 1、服务器Proxy。

??????实际上就是在服务器端获取跨域的数据。好处是可以返回任何类型的数据。

????? 目前见得比较多的是使用HttpClient来实现,代码大致如下:

String url = "*****";HttpClient client = new HttpClient();        HttpMethod method = new GetMethod(url);try {    // Execute the method.    int statusCode = client.executeMethod(method);    if (statusCode != HttpStatus.SC_OK) {        //输出    }    // Read the response body.    byte[] responseBody = method.getResponseBody();}catch (HttpException e) {    //异常输出}catch (IOException e) {    //异常输出}finally {    // Release the connection.    method.releaseConnection();}

?

??????2、动态Script标签。

????? 由前端获取跨域的数据,好处在于不用经过服务器端,避免增加服务器端的压力。但是这种方法要求返回的数据是JSON格式,同时需要额外的处理避免浏览器垃圾回收出现问题(直译下面给出的链接中的语句)。

????? http://neil.fraser.name/news/2009/07/27/这个链接给出了完整的解决方案。

????? 同时,一些JS框架也给出了自己的相应的解决方案。比如ExtJS,使用Ext.data.ScriptTagProxy来实现(API中有详细的使用方法),不过不清楚这个实现有没解决上面说到的垃圾回收问题,有时间再深入了解。

????? 3、隐藏Iframe。

????? 这个解决方案只能用在同一个父域的跨域中。

  经过上面的了解后,目前用第一种方式实现了跨域访问,不过准备把所有的实现修改为第二种,即动态Script标签的方式。

热点排行