jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – 如何在iframe中加载请求标头之前设置它大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_944_1@
我需要下载一个文件,其中’Content-Disposition’标题被服务器设置为“附件”.我正在使用jQuery.ajax进行GET并成功将隐藏的iframe src设置为url,这为我提供了一个文件下载弹出窗口.它在所有浏览器中都运行良好.
现在我想在GET&之前更改自定义请求标头以加密文件下载.我使用了jQuery.ajax预请求回调函数beforeSend.

我能够获取我可以在firebug中观察到的加密文件,但我的iframe仍然显示非加密文件供下载.检查后我可以说iframe请求新的GET.

$.ajax({
url: "/tutorial.text",beforeSend: function(xhr) {  xhr.setrequestHeader("passworD_HEADER",userPwd);  },success: function() {   $("#Hidden_iframe").attr("src",thiS.Url);  }                                   
});

这在Internet Explorer上运行良好.我如何强制iframe使用可用资源而不是请求新的GET.
或者我如何在iframe中设置setrequestHeader或者我真的需要一个jQuery.Ajax来执行此任务是否有任何最好的方法来下载直接从服务器设置为附件文件的Content-Disposition标头.

解决方法

解决方案不使用iframe或表单.它在支持CORS的资源上使用XHR和自定义标头(在本例中只是来自Internet的随机svg).这种方法的主要区别是xhr.responseType =’arraybuffer’;以及blob href和下载属性链接

jsfiddle

// some initial data
var url = '//enable-cors.org/img/cloud-download.svg';
var password = '123456';

// download url into arrayBuffer
function download (url,password,cb) {
    var xhr = new XMLhttprequest();
    xhr.open('GET',url,truE);
    xhr.responseType = 'arraybuffer';
    // xhr.setrequestHeader('passworD_HEADER',password);
    xhr.onload = function () {
        cb(xhr.responsE);
    };
    xhr.send(null);
}

// receive binary content of url
// create blob link and click on it
download(url,function (arrayBuffer) {
  var file = new File([arrayBuffer],'some filename');
  var a = document.createElement('A');
  a.setAttribute('href',window.URl.createObjectURL(filE));
  a.setAttribute('download','file-name-of-download.ext');
  // in firefox `a.click()` works only if `a` element is in DOM,so...
  document.documentElement.appendChild(a);
  a.click();
  console.log('done');
});

在Chrome57和FF54中测试过.

大佬总结

以上是大佬教程为你收集整理的jquery – 如何在iframe中加载请求标头之前设置它全部内容,希望文章能够帮你解决jquery – 如何在iframe中加载请求标头之前设置它所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。