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

Mon*_*ain 11 javascript dom document

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

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

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

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

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

小智 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"to 之外的所有值"text/plain",然后将该content-type应用于文档.

发现

.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();
});
Run Code Online (Sandbox Code Playgroud)


Wal*_*ril 0

一些上下文: 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 规范中不存在https://dom.spec.whatwg.org/

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

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