Smartbi 与第三方系统部署在不同的机器上,或者部署在同一机器不同的应用服务器域下,即出现跨域访问,则系统在访问过程中有可能出现各种奇怪问题。跨域问题解决方法,请参考以下步骤:
1、首先,需要部署 Smartbi 代理服务器,部署可以参考文档《代理服务器部署方案》。
2、(可选)如果有配置单点登录也需要做相应修改。需要将 config.baseURL 的地址修改为我们刚刚部署的代理服务器的访问地址,比如地址:http://localhost:8080/smartbi/vision/ 。请参考“第三方系统如何单点登录到Smartbi”步骤4中的代码,见下图。
注意: localhost和127.0.0.1是不同域
3、这样所有对 Smartbi 的访问,都通过smartbi_proxy代理程序中转,也就不存在所谓的跨域访问问题了。
参考:
可以使用以下的方式判断是否存在跨域问题:使用IE 8以上版本打开了Smartbi页面资源后,按下F12打开开发人员工具,切换到控制台标签页中,并在下方输入脚本:
跨域判断
var host = location.host; var stack = []; function check(win) { var list = win.document.getElementsByTagName("IFRAME"); for (var i = 0; i < list.length; i++) { var f = list[i]; if (f.id) stack.push("<iframe id='" + f.id + "'>"); else if (f.name) stack.push("<iframe name='" + f.name + "'>"); else stack.push(f.outerHTML); try { var w = f.contentWindow; var h = w.document.location.host; if (h != host && h.indexOf("about:") != 0 && h != "") { console.log("跨域:" + host + "<=>" + h + "\r\n" + stack.join("=>")); } check(w); } catch(e) { var h = f.src; try { var index = h.indexOf("://") + "://".length; var endIndex = h.indexOf('/', index); h = h.substring(index, endIndex); } catch(e) { } console.log("跨域:" + host + "<=>" + h + "\r\n" + stack.join("=>")); } stack.pop(); } } stack.push("window"); check(window);
并点击绿色三角形运行按钮,如果存在跨域情况是会输出跨域的节点结构的