12

我一直在页眉中向现有项目(使用 media="print")添加一些新的 CSS。它进展顺利并且(一次!)IE 给出了不错的预期结果,但 Firefox 没有......

问题是我有一个包含很多字段的字段集,而 Firefox 完全拒绝(即使在最新版本中)允许在字段集中分页。这意味着任何不适合一页的东西都会丢失......

我在已开放 3 年的 mozilla 网站上发现了该错误 - https://bugzilla.mozilla.org/show_bug.cgi?id=471015 - 但找不到任何合理的解决方法...

在我希望删除字段集或类似内容之前有什么建议吗?

谢谢,戴夫

4

3 回答 3

7

我对 FF 的 JQuery 解决方案:

<script type='text/javascript'>
    $(window).bind('beforeprint', function(){
        $('fieldset').each(
            function(item)
            {
                $(this).replaceWith($('<div class="fieldset">' + this.innerHTML + '</div>'));
            }
        )
    });
    $(window).bind('afterprint', function(){
        $('.fieldset').each(
            function(item)
            {
                $(this).replaceWith($('<fieldset>' + this.innerHTML + '</fieldset>'));
            }
        )
    });
</script>
于 2013-01-09T14:11:00.120 回答
4

正如我猜测的那样,它仍然在最新的Nightly中被破坏。

您可以尝试做一些类似于IE Print Protector(又名广泛使用的html5shiv)的事情。

http://www.iecss.com/print-protector/#how-it-works

为了在打印中正确显示元素,IE Print Protector 会在您打印时临时将 HTML5 元素替换为支持的后备元素(如 div 和 span)。IE Print Protector 还会根据您现有的样式为这些元素创建一个特殊的样式表;这意味着您可以通过链接、样式、@imports 和 @media 中的元素名称安全地设置 HTML5 元素的样式。紧接着,IE Print Protector 将原始 HTML5 元素恢复到页面,就在您离开它的位置。对这些元素的任何引用以及这些元素上的任何事件都将保持不变。

Firefox现在支持 onbeforeprint.

因此,当onbeforeprint被解雇时,您可以将fieldsets 更改为divs 或其他内容。

我不确定这有多可行,而且听起来确实很复杂。

于 2011-09-07T15:57:51.973 回答
2

看看我刚刚写的这个 jQuery hack 来解决这个问题,我想我会分享,即使我有点晚了。您可以将“printEnclosure”更改为我相信的 HTML 标签,最后的 CSS 显然是可选的。

<div id="printEnclosure">
<fieldset>
<legend>TEST</legend>

Test Content goes here...
</fieldset>
</div>

<script type="text/javascript">
/* <![CDATA[ */
$(document).ready(function()
{
        var i = 0;
        $('#printEnclosure').find('fieldset').each(function()
        {
            i++;
            $(this).replaceWith('<div id="convertedfieldset'+i+'">'+$(this).html()+'</div>');
            $('div#convertedfieldset'+i).css('display','inline').css('text-align','left');
        });
});
/* ]]> */
</script>
于 2012-03-15T14:37:38.893 回答