免责声明:我已经考虑了解决问题的各种方法,因此请在将此标记为重复问题之前阅读此内容
我在https://xyz.com
上运行了一个javascript,它必须从用户本地计算机上运行的应用程序ABC
中检索信息,例如端口8080.
我的约束是我无法修改从ABC
发出的HTTP标头,也不希望用户安装另一个应用程序,该应用程序将我的请求路由到ABC
。
跨域/窗口消息传递选项
a) window.postMessage:由于我无法在本地机器上运行脚本而被排除在外 b) XDR对象(IE)或Access-Control-Allow-Origin(Firefox,Safari等):由于无法修改标题而被排除在外 c) JSONP:再次这不起作用,因为我无法将响应包含在函数名称中
作为一种解决方法,仅用于测试我已将http://xyz.com
添加到受信任列表,并为此列表中的网站启用了Access Data Across Domains
。 AFAIK,此选项仅适用于IE 5+浏览器。此解决方法允许我发送和接收来自http://127.0.0.1:8080
的邮件
我的问题是双重的
1)如果我在投入生产时继续使用上述方法,那么我向用户展示的安全隐患是什么?我可以插上那些洞吗?
2)我是否还有其他选择可以实现我的目标。
PS:我希望尽可能远离ActiveX或Flash,但如果这是我当前方法的唯一可行替代方案,那么我将不得不遵守该行< BR />
干杯
答案 0 :(得分:1)
如果本地应用程序可以提供单个html文档,作为桥接器,那么您可以轻松地使用跨文档消息传递(例如使用easyXDM)以及来自此文档的ajax请求来执行此操作。这是一种非常简单的方法,也是一种常用方法。
easyXDM实际上附带了这样一个文档,你可以阅读它here。
答案 1 :(得分:0)
我认为最简单的方法是将服务器脚本放在https://xyz.com
上,它将充当javascript文件和ABC之间的桥梁。然后javascript文件将简单地向它自己的服务器脚本发送一个AJAX请求,该脚本将负责从远程域获取信息。唯一可行的解决方案可以在大多数浏览器中使用,并且不需要使用某些客户端技术(如Flash或ActiveX),这是JSONP,但您已经排除了这一点,因为您无法控制远程域。