2010-11-19 163 views
3

免责声明:我已经看了各种方法来解决我的问题,所以请标注这是一个重复的问题
跨域请求到localhost

前请阅读我有一个JavaScript上运行https://xyz.com其中有从用户的本地机器上运行的应用程序ABC检索信息说8080端口

我的约束是,我不能修改HTTP头散发形成ABC我也不希望用户安装其他应用程序,这将是一个导管路由我的r equests到ABC

跨域/窗消息选项

一)window.postMessage:排除了,因为我不能有脚本在本地机器
B)XDR对象(IE中运行)或访问控制允许来源(Firefox,Safari等):排除,因为我无法修改标题
c)JSONP:再次这将不起作用,因为我无法将函数名称中的响应封入

作为解决方法,仅用于测试,我已将http://xyz.com添加到受信任列表中,并已为此列表上的站点启用Access Data Across Domains。 AFAIK,此选项仅适用于IE 5+浏览器。此变通办法可以让我从http://127.0.0.1:8080
alt text

发送和接收消息我的问题是双重的
1)如果我要继续用上述方法,当我进入生产什么是我的安全问题米暴露用户?我可以堵住那些孔吗?
2)是否有其他选择可以实现我的目标?

PS:我想应该尽量远离ActiveX或Flash作为可能的,但在这是唯一可行的办法,以我目前的做法话,那么我将不得不言听计从

干杯

+0

我不明白,你目前的做法是什么?那只适用于IE? – 2010-11-19 20:45:32

+0

Felix,我添加了临时变通办法的屏幕截图 – Philar 2010-11-19 21:00:40

+0

所以它实际上并不是一个真正的解决方法,因为它只与IE一起工作;) – 2010-11-19 21:54:48

回答

0

我认为最简单的方法是在https://xyz.com上放置一个服务器脚本,它将充当javascript文件和ABC之间的桥梁。然后,JavaScript文件将简单地向其自己的服务器脚本发送一个AJAX请求,该脚本将负责从远程域获取信息。唯一可行的解​​决方案可以在大多数浏览器中使用,并且不需要使用某些客户端技术(如Flash或ActiveX),但JSONP却排除了这种情况,因为您无法控制远程域。

+0

-1 xyz.com上的服务器脚本如何访问客户端本地主机上运行的服务? – 2010-11-19 20:50:58

+0

@Byron Whitlock,它有什么不同?有一项服务在端口8080上运行。当然,如果这项服务不通过互联网公开,只有上帝才能访问它,所以在这种情况下问题是没有意义的。我猜测OP意味着客户端上的这个8080端口可以通过互联网访问。 – 2010-11-19 20:53:07

+0

Darin,对不起,如果我是懒惰的,在https://xyz.com上运行的脚本无法访问用户本地机器上的应用程序,因为该端口未暴露于互联网 – Philar 2010-11-19 20:58:12

1

如果本地应用程序可以为单个html文档提供服务,那么您可以轻松使用跨文档消息传递(例如easyXDM)以及来自此文档的ajax请求来执行此操作。这是一种非常简单的方法,也是一种常用的方法。

easyXDM实际上带有这样一个文件,你可以阅读它here

+0

谢谢肖恩,我会测试这个并恢复 – Philar 2010-11-28 05:23:06