如何在iframe中设置Chrome打印对话框的默认文件名?

时间:2017-02-02 23:53:35

标签: javascript jquery google-chrome iframe

我正在开展一个项目,我的项目部分是iframe中的仪表板。我有一个请求只是 iframe我正在以PDF格式导出(也就是说,只显示iframe内容而不是围绕它的包装器内容)。我已经得到了使用一些jQuery,但是 我现在很难设置保存为PDF的默认文件名。 This SO answer很有帮助(当iframe中的页面时设置document.title),但是当它在iframe视图中时单击导出按钮时它不起作用。这是我尝试过的一个例子:

$('#export-button').click(function() {
    $('#iframe-contents').show();
    document.title = 'default_filename';
    window.print();
});

在iframe中调用window.print()时,是否有人知道如何在Chrome打印对话框中设置默认文件名?

1 个答案:

答案 0 :(得分:1)

Firefox确实将pdf名称直接设置为iframe的文档名称,奇怪的是Chrome没有。

要获得解决方法,如果您的iframe与您的父网页共享相同的来源,您可以使用:

A

如果他们没有共享相同的来源,你就会被卡住

实际上存在黑客攻击,即使对于涉及document.title = window.parent.document.title = "yourTitle"; 的跨源框架也是如此,因此如果没有' allow-popups'权限。

window.open()

External Live Demo,因为function renameIframedPrint(title) { var title = "myFile"; try { // same-origin frame document.title = window.parent.document.title = title; print(); } catch (e) { // cross-origin frame // we could instead grab the current content of the page // but for the demo, location.href will do var p = window.open(location.href); p.onload = function() { // no more frame so we don't care ;-) p.document.title = "myFile"; // a bit more hack to close the popup once printed... function closePopup() { p.close(); } if ('onafterprint' in p) { // FF and IE p.onafterprint = closePopup } else { // webkit don't support onafterprint var mediaQueryList = p.matchMedia('print'); mediaQueryList.addListener(mqlListener); function mqlListener(mql) { if (!mql.matches) { closePopup(); mediaQueryList.removeListener(mqlListener); } } } } // we're ready p.print(); }; } 无法使用stack-snippet的沙盒iframe。