gpt4 book ai didi

javascript - 用于添加样式表的 document.write() 导致文档为空白

转载 作者:行者123 更新时间:2023-11-28 06:55:03 25 4
gpt4 key购买 nike

我尝试仅在浏览器为 Chrome 或 Opera 的情况下添加样式表。我有以下使用 YUI 库的控制流程:

  if ((Y.UA.chrome > 0) || (Y.UA.opera > 0)){
document.write("<link rel='stylesheet' media='print' type='text/css' href='../../../css/style_ticket_printing_header.css'/>");
}

这是有条件附加的 css 文件,style_ticket_printing_header.css

@page 
{
size: auto;
margin: 0mm;
}

这是完整的 HTML:

https://gist.github.com/ebbnormal/b1cff9d45914bc2f63a4

当我在 Chrome 中运行该页面时,没有一个 <div><body> 中定义的 s标记在 DOM 中呈现或显示。

特别令人困惑的是,当此 CSS 以正常方式加载时(通过页面的 <link> 中的 <head> 标记简单地引用它,所有 DOM 都被完美加载。

最后我知道它成功呈现了看到它是 chrome 的情况,因为我以前在成功执行的 if block 的主体中​​有一条警告消息。

最佳答案

document.write() for adding a stylesheet causes document to be blank

没错。当您在主页解析完成后使用 document.write 时,它会隐式地执行 document.open,这会清除页面。

相反,使用 createElementappendChild:

if ((Y.UA.chrome > 0) || (Y.UA.opera > 0)){
var link = document.createElement('link');
link.rel = "stylesheet";
link.media = "print";
link.type = "text/css";
link.href = "../../../css/style_ticket_printing_header.css";
document.querySelector("head").appendChild(link);
}

或者如果你真的喜欢使用 HTML::-)

if ((Y.UA.chrome > 0) || (Y.UA.opera > 0)){
document.querySelector("head").insertAdjacentHTML(
"beforeend",
"<link rel='stylesheet' media='print' type='text/css' href='../../../css/style_ticket_printing_header.css'/>"
);
}

(以上两个都假定您有一个 head 元素,您可能会这样做;它在格式良好的 HTML 文档中是必需的,无论是显式的还是因为浏览器为您添加了它[但明确是最好的]。)


关于 querySelector:它查找第一个与 CSS 选择器匹配的元素。所有现代浏览器都支持它,IE8 也支持。 (还有 querySelectorAll,它可以找到匹配元素的列表。)

关于javascript - 用于添加样式表的 document.write() 导致文档为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33555728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com