1

したがって、基本的に私がやろうとしているのは、MathML 式を適切にレンダリングするための Chrome 拡張機能を用意することです (「MathJax for Chrome」拡張機能を試しましたが、うまくいきません)。

私の当初の計画では、ノードに MathJax コードへのリンクを追加するだけでしたheadが、これは機能しません (ページが読み込まれた後に追加されるためだと思います)。

私の現在の計画は、各 MathML オブジェクトをiframe、MathJax コードを参照し、元の MathML オブジェクトのみを含む に置き換えることです。のiframeHTML は元の MathML 要素に基づいているため、srcdoc属性を使用しています。これが私の現在のスクリプトです:

$(document).ready(function() {
    $("math").each(function(index, obj) {
        // create an inline frame to replace the math element
        var iframe = document.createElement("iframe");
        var html = '<html><head><script type="text/javascript" src="https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></head>';
        html += '<body>';
        // http://stackoverflow.com/questions/2419749/get-selected-elements-outer-html
        html += $(obj).clone().wrap('<p>').parent().html();
        html += '</body></html>';
        $(iframe).attr("srcdoc", html);
        iframe.textContent = "FOO";
        $(obj).replaceWith(iframe);
    });
});

これは、Mozilla の MathML "Torture Test" のような XHTML 以外のページでは機能しますが、XHTML (トランジショナルであっても) では"FOO"テキストを取得するだけです。

iframeXHTML Transitional で sを機能させるために必要なことは他にありますか? または、私が望むものを達成するためのより良い方法はありますか?

4

1 に答える 1

0

問題は次のとおりです。

  • srcdocHTML5 doctype によってトリガーされるHTML5の一部として iframe 要素に追加されました

  • XHTML Transitional は HTML5 doctype を使用しません

次のように、エンコードされたデータ: URIobject下位互換性のための要素を使用します。

var newobj = $("<object/>", {"text":"FOO"});
var html = "<html><head></head><body><p>XHTML is the best</p></body></html>"
var xhtml = encodeURIComponent(html);
newobj.appendTo("body");
/* Add attribute values after appending to the DOM */
$(newobj).attr({data:'data:text/html;charset=utf-8;,'+xhtml, type:"text/html"})

参考文献

于 2014-08-29T20:54:02.953 に答える