Javascript如何“跨域”索取信息

记得一两年前,Ajax开始被炒得火热的时候 ,那时也是我刚刚学习Javascript,就曾经听说过XMLHttpRequest在默认浏览器限制下是不能跨域访问的。而由于过的太久了,我一时给忘记了,更由于自己经常写js自娱自乐,在本地文件打开就没有“跨域”这个概念了。所以之前还跟人家在论坛上争吵这个议题。

其实如果真的没有那个限制的话,可能一切都乱了套了,那随便的静态网站都动态化了。不管是基于安全还是基于版权,我都觉得这个浏览器策略是正确的。

然而,凡事都有例外的,怎么让“可信任的网站”访问我的网页源代码呢?

你知道“百度知道”可以嵌入在自己的网页里是什么原因吗?

很简单,是因为那是js脚本嵌入~~~而且是直接用document.write~因为html是直接“写”在你的文档里~所以所获取的“数据”是完全可以由你的代码控制的。

可能讲到这里有人觉得,这有什么,关键是别人的网页都不是“百度知道”,难道为了js的跨域我就要专门设立一个“输出管道”不成?

其实想想,有何不可?

其实只要一个简单的步骤就可以实现客户端代码的跨域访问了:

在“被访问”的数据源网站的网站程序设置一个“代理”就行了,简单来讲就是通过服务器代码检测http请求是否来自“被信任的网站”,然后以一种不同的方式返回“html文本”。

举例来讲就是:a.com和b.com网站

a.com的脚本想要访问b.com的任意一个页面,通过xmlHttpRequest做不到,可以用

<script type="text/javascript" src="http://b.com/any"></script>,脚本动态实现。。。

如果是一般人访问http://b.com/any的话返回的文件是:

< html >
< head >
< title >
Any Title
</ title >
</ head >
< body >
Any Content
</ body >
</ html >

而由a.com页面下发起的请求则返回以下文本:

var  bDotCom = {any: ' <html><head><title>Any Title</title></head><body>Any Content</body></html> ' }

 

这样复杂吗?如果原文件没有换行或者引号的话确实很简单..(.=.=怎么可能没有)所以还要做必要的字符串转换,比如把换行符换成文本型的/n等等……反正就是要做到html文件以js代码的身份潜入到客户端,供客户端代码差遣。

总的来说,这是一个无聊的解决方案。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值