Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么document.write创建的文档在写入的一部分参与超时块时呈现不同?_Javascript_Html_Dynamic_Write - Fatal编程技术网

Javascript 为什么document.write创建的文档在写入的一部分参与超时块时呈现不同?

Javascript 为什么document.write创建的文档在写入的一部分参与超时块时呈现不同?,javascript,html,dynamic,write,Javascript,Html,Dynamic,Write,页面的代码为: 该网站是: 浏览器是Chrome 如果渲染发生在单个块中,则inspect元素应如下所示: 如果我用timeout-like调用它,以便稍后写入主体,然后在写入所有内容后检查元素,如下所示: 头部部分是空的。但图标仍被渲染 我不明白为什么会这样 我有一个更复杂的页面,有几次写入,其中根本没有呈现图标。我无法将后一个错误缩小到某个简单的示例中,但尝试这样做时,至少我遇到了这个奇怪的检查渲染,我可以复制它。对于标题中的问题,当您尝试从setTimeout加载新标题时,文档已通过回

页面的代码为:

该网站是:

浏览器是Chrome

如果渲染发生在单个块中,则inspect元素应如下所示:

如果我用timeout-like调用它,以便稍后写入主体,然后在写入所有内容后检查元素,如下所示:

头部部分是空的。但图标仍被渲染

我不明白为什么会这样


我有一个更复杂的页面,有几次写入,其中根本没有呈现图标。我无法将后一个错误缩小到某个简单的示例中,但尝试这样做时,至少我遇到了这个奇怪的检查渲染,我可以复制它。

对于标题中的问题,当您尝试从setTimeout加载新标题时,文档已通过回调
document.open()
加载

现成的解决方案 确保在
文档之后初始化新的标题元素。在
setTimeout()中调用write()
,请记住定义是:

Document.write()方法将文本字符串写入Document.open()打开的文档流

参考:

解决方案 实例: 沙箱

源代码

第一视图标题
函数addHeaderElements(){
//创建新常量以保留addHeaderMeta
var headerTag=document.getElementsByTagName(“head”);
//创建新标题
var newTitle=document.createElement(“标题”);
var titleText=document.createTextNode(“动态标题”);
newTitle.appendChild(titleText);
headerTag[0]。appendChild(newTitle);
}
函数dynamicFavicon(){
//动态更改favicon
var headerTag=document.getElementsByTagName(“head”);
var newLink=document.createElement(“链接”);
setAttribute(“rel”、“icon”);
setAttribute(“类型”、“图像/x图标”);
newLink.setAttribute(“href”https://stackoverflow.com/favicon.ico");
headerTag[0]。appendChild(新链接);
}
函数writeBody(){
document.write(`dynamicpage`);
addHeaderElements();
dynamicFavicon();
}
if(document.location.href.match(/timeout/){
dynamicFavicon();
setTimeout(()=>writeBody(),5000);
}否则{
书面文件(“第一次查看”);
}
默认情况下,Favicon会被请求提供相关问题的附加链接以获取更多信息

该文档不是您首先想到的文档。当document.write不在解析阶段运行时,它就是这样做的。找到另一种方法来修改DOM。好的。我有一个自己的动态页面构建DOM包装器(您可以在中看到它的操作),但我不想为相对简单的单文件页面调用它,独立于主站点托管,我想我可以用write来完成,我通常不会这么做。因此,它不像人们天真地期望的那样起作用。感谢您提供此信息。感谢您提供此详细答案并指出
文档的正确定义。请编写
。我想以答案的方式设置标题一定是出于教育原因,因为您可以只做
document.title=“dynamic title”
。绝对可以@easychessanimations您是对的,尽管
newLink
还具有(rel,type,href)属性,您可以通过
newLink.rel=“icon”修改它
<!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>