如何解决如果部分写入参与超时块,为什么document.write创建的文档呈现不同的外观? 源代码
页面的代码为:https://github.com/easychessanimations/htmltest/blob/main/dynamic.html。
该站点是:https://htmltestsite.netlify.app/dynamic.html。
浏览器是Chrome。
如果渲染发生在单个块中,则inspect元素应如下所示:
如果我以https://htmltestsite.netlify.app/dynamic.html?timeout之类的超时调用它,以便稍后编写正文,则在编写所有内容之后检查元素,如下所示:
头部为空。但是图标仍然呈现。
我不知道为什么会这样。
我有一个比较复杂的页面,其中包含多次写操作,其中图标根本没有呈现。我不能将后面的错误缩小为一个简单的示例,但是至少要做到这一点,我击中了这个奇怪的检查渲染,可以重现。
解决方法
在标题已被回调document.open()
加载而试图从setTimeout加载新标题时遇到的标题问题。
开箱即用的解决方案
请确保在document.write()
内部调用setTimeout()
之后初始化新的标头元素,并记住定义是:
Document.write()方法将文本字符串写入由document.open()打开的文档流中。
解决方案
实时示例:https://1cldn.csb.app/?timeout
沙盒
源代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>First View Title</title>
<link rel="icon" type="image/x-icon" href="https://stackoverflow.com/favicon.ico" />
</head>
<script type="text/javascript">
function addHeaderElements() {
// Create new const to hold on to your addHeaderMeta
var headerTag = document.getElementsByTagName("head");
// Create New Title
var newTitle = document.createElement("title");
var titleText = document.createTextNode("dynamic title");
newTitle.appendChild(titleText);
headerTag[0].appendChild(newTitle);
}
function dynamicFavicon(){
// Change favicon dynamically
var headerTag = document.getElementsByTagName("head");
var newLink = document.createElement("link");
newLink.setAttribute("rel","icon");
newLink.setAttribute("type","image/x-icon");
newLink.setAttribute("href","https://stackoverflow.com/favicon.ico");
headerTag[0].appendChild(newLink);
}
function writeBody() {
document.write(`dynamic page`);
addHeaderElements();
dynamicFavicon();
}
if (document.location.href.match(/timeout/)) {
dynamicFavicon();
setTimeout((_) => writeBody(),5000);
} else {
document.writeln("First View");
}
</script>
</html>
默认情况下,需要图标,我附加了相关问题的链接,以获取更多信息 How to prevent favicon.ico requests?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。