Javascript 直接向对象标记提供数据

Javascript 直接向对象标记提供数据,javascript,html,pdf,object-tag,Javascript,Html,Pdf,Object Tag,我想在我的网站中嵌入一个PDF文件,它看起来像这样: <object data="data/PDFTest1.pdf" type="application/pdf" id="data"></object> 但是我想先用ajax获取文件(在javascript文件中),用javascript编辑它的源代码,然后创建一个,并给出结果数据。问题在于,对象在其数据属性中需要一个url,并且不直接接受实际数据。我该怎

我想在我的网站中嵌入一个PDF文件,它看起来像这样:

<object data="data/PDFTest1.pdf" type="application/pdf" id="data"></object>

但是我想先用ajax获取文件(在javascript文件中),用javascript编辑它的源代码,然后创建一个
,并给出结果数据。问题在于,对象在其
数据
属性中需要一个url,并且不直接接受实际数据。我该怎么办

例如,有没有办法在javascript中创建一个“假url”

或者我能以另一种方式将数据传递给对象吗

或者我应该使用其他标签吗


提前谢谢,我的英语很抱歉。

您实际上不需要URL。可以将PDF转换为base64,并将数据属性设置为数据本身。您只需要在base64前面加上“data:”前缀,然后是mime类型、分号“base64”,然后是表示PDF的base64编码字符串

<object data="data:application/pdf;base64,YOURBASE64DATA" type="application/pdf"></object>

我知道这有点陈旧,但我想在所选答案的基础上进一步介绍如何使用
FileReader.readAsDataURL
生成数据url

下面是一个用承诺包装的例子

export function blobAsDataUrl (blob) {
  return new Promise((resolve, reject) => {
    let reader = new FileReader();

    reader.onload = (event) => {
      resolve(event.target.result);
    };
    reader.onerror = (error) => {
      reader.abort();
      reject(error);
    };

    reader.readAsDataURL(blob);
  });
}

// Handle the promise however you like
// This is in the format: data:application/pdf;base64,BASE64DATA
let data_url_for_object = await blobAsDataUrl(<Blob or File>);
导出函数blobAsDataUrl(blob){
返回新承诺((解决、拒绝)=>{
let reader=new FileReader();
reader.onload=(事件)=>{
解决(事件、目标、结果);
};
reader.onerror=(错误)=>{
reader.abort();
拒绝(错误);
};
reader.readAsDataURL(blob);
});
}
//你想怎么做就怎么做
//其格式为:数据:application/pdf;base64,base64数据
让_对象的数据_url_=等待blobAsDataUrl();