apache代理 访问跨域代码

在工作中遇到了这么一个问题?根据一个url路径来获取用户的状态,实际上是发送了一个servlet请求给服务器,然后server端通过数据流打印到前端。因此使用iframe能够显示前端的状态(图片或者是文字),现在的问题是开发人员想获取到我们写的用户状态,即在iframe中显示的文字,由于之前的URL已经指定了服务器的IP地址,因此在开发人员的应用中是无法访问这个iframe的,因为IP地址不一致,已经跨域了,所以不能访问。

 

我的解决办法 —— 利用apache的代理方式来访问?

1、在本机中安装apache,然后配置代理

ProxyPass /http-plugins/ http://172.16.14.81:9090/plugins/

备注:标示在apache访问/http-bind/类似于访问 http://172.16.14.81:7070/http-bind/目录下的内容

 

2、在apache容器下添加一个页面,里面包含一个iframe标签,将src以相对路径的方式访问,apache实际上是会访问其他IP地址的路径

<iframe id="test_iframe" name="test_iframe" src="/http-plugins/presence/status?jid=abc@jdchat&type=text" ></iframe>

或者

<iframe id="test_iframe" name="test_iframe" src="http://127.0.0.1/http-plugins/presence/status?jid=abc@jdchat&type=text" ></iframe>

备注:这两种方式的效果是一样的,都没有任何问题

 

apache根据url实际上访问的是下面的地址

<iframe id="test_iframe" name="test_iframe" src="http://172.16.14.81:9090/plugins/presence/status?jid=abc@jdchat&type=text"></iframe>

 

3、访问iframe里面的内容

function init() {
//使用Jquery的方式访问
    alert($("pre", document.getElementById('test_iframe').contentWindow.document).attr("innerHTML"));
//使用js原始代码访问
    //alert(window.frames["test_iframe"].document.getElementsByTagName('pre')[0].innerHTML);
    //alert(document.getElementById('test_iframe').contentWindow.document.body.innerHTML);
}

 

备注:我开始测试是将init方法放在jquery中的document.ready方法中运行的,在IE中能够正常显示,但是在chrom中无法访问,经过反复测试,将这个方法抽出来,使用按钮事件来触发,结果显示正确。

<input type="button" value="登录" id="hb" οnclick="javascript:init();" style="font-size: 12px;"/>

 

结论:在IE中访问iframe中的内容实用是单线程,数据是从上往下运行,如果IFRAME中的数据没有获取到会阻塞,而chrome实际上上采用多线程的方式加载内容,页面的内容已经全部OK了,但是还是访问不到iframe里面的数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值