最近项目中需要调用某个商用的报表服务,调用方式就是通过该服务的url带参数来生成报表,但是url又挂着用户名密码等信息。因为只是最简单的购买了人家的服务,人家并不提供更安全的从后台进入的方式(需要加钱)。。。只好通过前台包装一下url进行传输。虽然经过https加密,可以不用担心传输过程的安全问题,但是前台还是可以从f12查到参数信息的,暂时没想到更好的办法。
/**
* @Author Qk
* @Date 2017/10/31 12:01
* @Description 隐藏url参数,并跳转
* @Param
* @Return
*/
var formUtil = (function () {
//根据参数生成form元素
function generateFormDom(config) {
config = config || {};
var url = config.url,
method = config.method || 'GET',
params = config.params || {};
var form = document.createElement('form');
//引入页面必须有body,不然会报form连接失败
document.body.appendChild(form);
form.action = url;
form.method = method;
form.target = "_blank";
for (var param in params) {
var value = params[param],
input = document.createElement('input');
input.type = 'hidden';
input.name = param;
input.value = value;
form.appendChild(input);
}
return form;
}
//解析url后跳转
var submitFormUrl = function (url) {
if (typeof url !== 'string') {
return false;
}
var params = {};
var paramsarr = url.split('?');
//获取host
var urlPre = paramsarr[0];
//获取参数数组
paramsarr = paramsarr[1].split('&');
var length = paramsarr.length;
for (var n = 0; n < length; n++) {
params[paramsarr[n].split('=')[0]] = paramsarr[n].split('=')[1];
}
//根据url解析结果,生成form元素
var form = generateFormDom({
url: urlPre,
method: 'POST',
params: params
});
$(form).submit();
//提交后,移除页面中的form元素
$(form).remove();
};
return {
submitFormUrl: submitFormUrl
}
})();