有空白页面的代码
let a = document.createElement("a");
a.href = res.data; // 这里的请求方式为get,如果需要认证,接口上需要带上token
a.click()
```
既然不想出现空白页面的话,那不直接打开一个页面而改成在当前页打开就可以了。
这时候想到iframe,借助iframe可以在原页面打开一个页面。
解决的方案
```
var不能改成let,就直接用var就可以了
var src = res.data;
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = "javascript: '<script>location.href=\"" + src + "\"<\/script>'";
document.getElementsByTagName('body')[0].appendChild(iframe);
```
以上有报错403,解决的办法就是
```
iframe.src = src
```
全代码
```
var src = res.data;
let iframe = document.createElement('iframe');
iframe.src = src;
iframe.style.display = 'none';
document.getElementsByTagName('body')[0].appendChild(iframe);
```
以上代码有会下载2遍,正在解决中。。。以下是解决iframe重复下载的问题
```
exportInvoice() {
if (this.importLoading) {
return;
}
this.importLoading = true;
let data = {
requestNo: this.apply.requestNo
};
buyerExport(data).then((res) => {
if (res.code == 200) {
this.importLoading = false;
this.downloadIfrme(res);//调用公告方法
} else {
this.importLoading = false;
}
});
},
写在mixins文件里面的index.js公共文件中
//oss文件下载
downloadIfrme(res) {
//获得id为downLoadListFrame的frame
let src = "";
let divFrame = document.getElementById("downLoadListFrame");
//判断是否存在,如果存在先移除,再重新创建
if (divFrame != null) {
document.body.removeChild(divFrame);
}
src = res.data;
let iframe = document.createElement("iframe");
//setAttribute() 方法添加指定的属性,并为其赋指定的值,如果这个指定的属性已存在,则仅设置/更改值。
iframe.setAttribute("id", "downLoadListFrame");
iframe.src = "";
iframe.src = src;
iframe.style.display = "none";
document.body.appendChild(iframe);
//下载完以后删掉
setTimeout(() => {
iframe.src = "";
iframe.remove();
}, 1000);
}
```
网友评论