1

次の方法で MathML サポートを検出できます。

var e = document.createElement('div');
    e.innerHTML = '<math></math>';
    var mathMLSupported = e.firstChild && "namespaceURI" in e.firstChild && e.firstChild.namespaceURI == 'http://www.w3.org/1998/Math/MathML';

<mfrac>しかし、と のサポートを検出する方法は<mtable> ?

4

4 に答える 4

4

Element#getBoundingClientRect

function hasMathMLSupport() {
  const div = document.createElement("div");
  div.innerHTML = '<math><mfrac><mn>1</mn><mn>2</mn></mfrac></math>' +
                  '<math><mn>1</mn></math>';
  document.body.appendChild(div);
  return div.firstElementChild.firstElementChild.getBoundingClientRect().height > div.lastElementChild.firstElementChild.getBoundingClientRect().height + 1;
}

console.log(hasMathMLSupport());

window.getComputedStyle

(夜間モードの Mi Browser では色が rgba(255, 255, 255, 0.5) に変わるため、機能しません)

function hasMathMLSupport() {
  const div = document.createElement("div");
  div.innerHTML = '<math><mrow mathcolor=\"red\"><mn>1</mn></mrow></math>';
  document.body.appendChild(div);
  return window.getComputedStyle(div.firstChild.firstChild, null).color === "rgb(255, 0, 0)";
}

console.log(hasMathMLSupport());

Element.querySelector(":link")あり : (Safari 10 以降、Firefox ? 以降)

function hasMathMLSupport() {
  const div = document.createElement("div");
  div.innerHTML = '<math><mrow href=\"https://ya.ru\"><mn>1</mn></mrow></math>';
  document.body.appendChild(div);
  return !!div.querySelector(":link");
}

console.log(hasMathMLSupport());

window.MathMLElement != null を使用 (インターフェイスは MathML 4 仕様で追加されました)

于 2016-08-23T16:11:31.523 に答える
3

jqmathでは、隠し<mfrac>要素を作成し、その計算された高さを非分数の高さと比較します。実際のコードについては、jqmath-0.1.js の M.checkMathML 関数を参照してください。XML 名前空間の有無にかかわらず (ブラウザーによって異なります)、Internet Explorer 用の MathPlayer プラグインの名前空間プレフィックスを許可することで、少し複雑になります。

于 2011-03-19T23:55:24.833 に答える
1

このドキュメントに従うと、準拠ブラウザはDOM内の特定のMathML要素に対していくつかのプロパティ(別名バインディング)を実装する必要があります。したがって、MathML mtable要素を作成して、ブラウザが次のrowalignプロパティを追加するかどうかを確認できます。

var tmp = document.createElementNS('http://www.w3.org/1998/Math/MathML',
                                   'mtable');
if (tmp.hasOwnProperty('rowalign')) {
  return true;
} else {
  return false;
}
于 2011-01-28T10:20:34.773 に答える