JavaScript的document.open是否支持MIME类型参数?

问题描述 投票:11回答:2

一些文档表明document.open()支持将MIME类型作为其第一个参数。例如:HTML DOM Open Method (Dottoro)

我还有一本古老的JavaScript教科书,声称你可以将MIME类型传递给document.open().但我看到的大多数文档都说不然:

这是一个早期JavaScript支持的参数,后来被删除了吗?

我没有在DOM规范中看到它:

这只是为了我的兴趣;我没有参数的特定用例。

javascript dom document
2个回答
5
投票

Chrome不使用type参数。

V8Document.openMethod()方法检查document.open(...)的参数的空气性然后调用v8Document.open1Method()v8Document.open2Method()v8Document.open2Method()甚至没有阅读它提供的第一个(type)论点。 v8Document.open1Method()读取它,并将其设置为默认值"text/html",如果它未定义。然后它将type值传递给Document.open()方法,但是从那里它被忽略了。

火狐

Firefox使用type参数,但唯一可接受的非默认值是"text/plain"

如果参数丢失,nsHTMLDocument::Open()方法将type设置为"text/html",然后调用另一个重载。重载将type以外的所有"text/html"值转换为"text/plain",然后将该内容类型应用于文档。

发现

.contentType属性可以告诉我们我们拥有的document的类型。我们不能提前使用它来进行特征检测,但是我们可以用它来检查文件实际打开的类型,并相应地修改我们的输出。例如:

setTimeout(function() {
  document.open('text/plain');

  if (document.contentType == 'text/plain') {
    document.write("I'm text/plain! :-D");
  } else if (document.contentType == 'text/html') {
    document.write("I'm <code>text/html</code>. :-(");
  } else {
    document.write("I'm confused! Also: " + document.contentType);
  }

  document.close();
});

-1
投票

某些上下文:document.write和document.open存在一些问题,因此不鼓励使用它们。看到

https://developers.google.com/web/updates/2016/08/removing-document-write https://www.sitepoint.com/insert-in-place-without-documentwrite/

它是一个旧的DOM API,并且在当天浏览器制造商没有像今天那样协调实施w3规范。 (这是当时的参考,现在更多的是whatwg)

因此可能有一些浏览器确实为document.open提供了MIME参数,但依赖它可能会导致错误。所以它不可靠。尽可能使用替代品。实际上有一天它可能会完全被删除。它在最后一个dom whatwg spec https://dom.spec.whatwg.org/中不存在

答案是:这取决于浏览器。从dottoro链接提供似乎Safari和Chrome从未支持它。

从技术上讲,它不是JavaScript API,而是DOM。

© www.soinside.com 2019 - 2024. All rights reserved.