遇到一个需求,项目使用的是pdf.js, 在显示pdf的过程中,需要点击一个下载按钮来下载文件。但是pdf.js本身就带有下载按钮,(即有下载功能)。所以我想点击父页面的按钮,触发子页面iframe的下载按钮。
1. 按钮页面
2.(上方)下载按钮
<button type="text" icon="fa fa-save" label="下载" (click)="download()"></button>
3.iframe所在位置
<p-tabPanel header="PDF" leftIcon="fa fa-language">
<div class="ui-grid ui-grid-pad" style="height:100%">
<div class="ui-grid-col-12 ui-widget-content border-spe-right" style="height:100%">
<iframe id="pdfConcent" src="/assets/other/pdfjs/viewer.html"
style="width:100%;height:100%;">
</iframe>
</div>
</div>
</p-tabPanel>
4.download()事件
download() {
console.log("下载被点击");
let d = window.frames[0].document.getElementById("download");
d.click();
console.log(d);
console.log("下载被点击结束");
}
5.(下方)pdf.js下载按钮
<button id="secondaryDownload" class="secondaryToolbarButton download visibleMediumView" title="Download" tabindex="54" data-l10n-id="download">
<span data-l10n-id="download_label">Download</span>
</button>
6.结果图
总结
由于iframe内元素不能直接获取,所以要麻烦一些。(首先要保证页面加载完毕,按需使用window.onload)
网上其他“js获取当前页内的iframe页面的元素”的方法都不适用,例如使用frameObject.contentWindow或者直接使用getElementById()。
应使用
let d = window.frames[0].document.getElementById("download");
d.click();