我正在开展一个项目,我的项目部分是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打印对话框中设置默认文件名?
答案 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。