直接为对象标签提供数据
Providing the Object tag with data directly
我想在我的网站中嵌入一个 PDF 文件,它看起来像这样:
<object data="data/PDFTest1.pdf" type="application/pdf" id="data"></object>
但后来我想先用 ajax 获取文件(在 javascript 文件中),在 JavaScript 中编辑它的源代码,然后创建一个 <object>
并给它结果数据。问题在于对象在其 data
属性中需要一个 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 来扩展所选答案
这是一个包装在 Promise 中的示例。
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>);
我想在我的网站中嵌入一个 PDF 文件,它看起来像这样:
<object data="data/PDFTest1.pdf" type="application/pdf" id="data"></object>
但后来我想先用 ajax 获取文件(在 javascript 文件中),在 JavaScript 中编辑它的源代码,然后创建一个 <object>
并给它结果数据。问题在于对象在其 data
属性中需要一个 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
.
这是一个包装在 Promise 中的示例。
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>);