Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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 如何更改DOCTYPE_Javascript_Html_Doctype - Fatal编程技术网

Javascript 如何更改DOCTYPE

Javascript 如何更改DOCTYPE,javascript,html,doctype,Javascript,Html,Doctype,这里有人知道我如何用javascript动态更改doctype吗 我试过这个功能 document.doctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'); , document.doctype(“”), 但是它不起作用。我想你不行doctype是W3C文档中的一个属性,但它是只读的。即使不是这样,我也无法想象在现实浏览器中改变它会产生什么影响 下面是您的评论:您必须处理此服务器端并返回为目标浏览器定制

这里有人知道我如何用javascript动态更改doctype吗

我试过这个功能

document.doctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'); ,
document.doctype(“”),

但是它不起作用。

我想你不行
doctype
是W3C文档中的一个属性,但它是只读的。即使不是这样,我也无法想象在现实浏览器中改变它会产生什么影响


下面是您的评论:您必须处理此服务器端并返回为目标浏览器定制的页面。但在某些非常边缘的情况下,您不应该这样做。

document.doctype是只读的
属性,而不是方法,显然是根据MDC

您需要的是:


返回DocumentType对象,该对象可以在创建文档时与doImplementation.createDocument一起使用,也可以通过Node.insertBefore()或Node.replaceChild()将其放入文档中:

,即使可以,您的代码将在页面已经决定呈现之后执行,在这种情况下,更改doctype的效果是无效的。我能想象的现代浏览器存在doctype问题的唯一方式是,您依赖IE中的怪癖模式-修复您的设计,使其适用于除IE之外的所有浏览器,然后查看IE特定的样式。

为了验证此用例,我有以下场景:

我有一个TAL模板,可以呈现页面的一小部分。然后,我将该部分包装在父标记中,如下所示:

<html tal:omit-tag="True" ...>
  <body tal:omit-tag="True">
    <div class="wrapper" tal:omit-tag="True">
      ..

        <div id="mydiv" tal:content="foo()">Example content.</div>

      ..
    </div>
  </body>
</html>
if (!document.doctype) {
    document.write('<!doctype HTML>\n' + \
        document.head.outerHTML + \
        document.body.outerHTML);
}

..
示例内容。
..
这样,该TAL模板就可以作为一个独立的HTML文件由设计师查看/编辑。但是不能在TAL中省略DTD,因此不能将其添加到那里

使用JavaScript添加它的简单方法如下:

<html tal:omit-tag="True" ...>
  <body tal:omit-tag="True">
    <div class="wrapper" tal:omit-tag="True">
      ..

        <div id="mydiv" tal:content="foo()">Example content.</div>

      ..
    </div>
  </body>
</html>
if (!document.doctype) {
    document.write('<!doctype HTML>\n' + \
        document.head.outerHTML + \
        document.body.outerHTML);
}
if(!document.doctype){
document.write('\n'+\
document.head.outerHTML+\
文件.body.outerHTML);
}

如果问题只出现在IE上,因为我也遇到过同样的问题,我对IE使用了怪癖模式-只需在文档类型声明之前使用注释,IE就会进入怪癖模式

另一种解决方法是,首先加载脚本以检测浏览器,然后使用browsers参数重定向到另一个页面,在该页面上可以声明依赖于浏览器的doctype

我对代码所做的示例如下:-

<!--[if lt IE 9]>
<![endif]-->
<![if gte IE 9]>
<!DOCTYPE html>
<![endif]>


在这里,我已经从浏览器中删除了doctype declearing

我希望这一个可以帮助你们中的一些人(在控制台中测试,它改变了实际的doctype)


只是好奇,你为什么要这样做?即使你可以,你希望从中得到什么效果?IIRC,浏览器在解析页面时只考虑doctype一次。这是根据只读的,真正的原因是,我创建的设计在不同的浏览器中出错,我发现,通过在不同的浏览器中使用不同的doctype,页面看起来再次正常。Mana,与其测试每一个可能的Doctype或尝试动态地更改它(这是不可能的,或者不会有什么区别),不如尝试询问您实际遇到的问题(包括源代码的相关部分,最好是指向有问题的示例页面的链接),这样我们就可以修复它们,而不是有条件地选择浏览器模式,这不是一个好主意(总是(尝试)使用标准模式)。仅供参考,请阅读。关于你的最后一句话(“他们只是根据是否存在doctype而不是它是什么来标记怪癖模式”):这不是真的。有几种doctype会触发怪癖模式,比如HTML3.2,OP在对问题的评论中提到过。看。@Marcel:太棒了。我已经多次看到“没关系,只要有DOCTYPE”的说法,我很惊讶以前没有看到它相互矛盾。非常有趣的桌子,谢谢。你也可以看到为什么3.2也是怪癖模式。我已经删除了这句话,再次感谢。
createDocumentType
并非在所有浏览器中都可用。Chromium没有它。2013年3月30日:Chromium有它,IE9+感谢Akash,这帮我解决了我在PhantomJS中苦苦挣扎了一段时间的问题。document.implementation.createDocumentType()在IE8中不可用,很遗憾,现在我需要在IE8中使用它。试试这个@Jim22150是的,在我们尝试访问文档对象的任何部分之前,最好等待实际的DOM加载。它会更改inspector选项卡中的doctype文本,但仅此而已,如果您将doctype从html4更改为html5或从xhtml更改为html,它仍将按照旧doctype运行。在Firefox51中测试