【发布时间】:2011-07-02 22:22:43
【问题描述】:
想象一个网页,它允许用户显示隐藏元素,在运行时使用 javascript 修改 css 一种 CSS 样式。
在做出决定(包括修改样式表)后,用户使用其浏览器的打印功能。
如果原始 css 定义位于外部文件中,Internet Explorer 似乎不尊重在 打印 之前对样式表所做的更改。 在其他浏览器中,一切正常。
请看下面的示例,它在运行时将样式类从其初始定义display:none 更改为display:inline,因此将显示该元素。
但是在打印此页面时,元素仍然隐藏在 Internet Explorer 中(使用 IE 6、7、8 测试)。
您有解决方案或解决方法吗?
简约示例(html 文件):
<html><head>
<LINK rel="stylesheet" type="text/css" href="minimal.css">
</head><body onload="displayCol();">
<script>
function displayCol()
{
var myrules;
if( document.styleSheets[0].cssRules ) {
myrules = document.styleSheets[0].cssRules;
} else {
if ( document.styleSheets[0].rules ) {
myrules = document.styleSheets[0].rules;
}
}
myrules[0].style.display = "inline";
}
</script>
<div class="col0" id="test">This is hidden by default.</div></body></html>
minimal.css
.col0 {
display:none;
}
更新:
请注意,是否显示对象由用户决定 - 在运行时不知道!
【问题讨论】:
-
它不起作用,因为样式应用于可见屏幕而不是打印(当您单击打印预览时,网页会重新加载以准备使用默认 css 作为值进行打印)。我建议您使用带有 media="print" 的 css 并有条件地使用特定版本的 Internet Explorer。
-
@RoBYCoNTe 我已经更新了问题 - 是否应该显示对象的决定由用户完成。如果他决定显示对象 displayCol() 将被调用 - 但它只在屏幕上显示对象而不在打印机上显示。
-
@MR:你解决过这个问题吗?我有同样的问题。我使用 jquery 的 .toggle() 方法来切换部分发布页面加载的可见性。该部分不会在 FF/Chrome 上打印(如预期的那样),但仍会在 IE 上打印。您对此有解决方案吗? (我讨厌 IE)
标签: javascript html css browser cross-browser