1

所以,基本上我想要做的是有一个 Chrome 扩展来正确呈现 MathML 表达式(我已经尝试过“MathJax for Chrome”扩展,但它对我不起作用)。

我最初的计划是在head节点中添加一个指向 MathJax 代码的链接,但这不起作用(我假设是因为它是在页面加载后添加的)。

我目前的计划是将每个 MathML 对象替换为iframe引用 MathJax 代码并且仅包含原始 MathML 对象的对象。由于iframe的 HTML 基于原始的 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);
    });
});

这适用于非 XHTML 页面,例如 Mozilla 的 MathML“酷刑测试”,但对于 XHTML(甚至是过渡)我只得到"FOO"文本。

iframe为了让s 为 XHTML Transitional 工作,我还需要做些什么吗?还是有更好的方法来实现我想要的?

4

1 回答 1

0

这是问题:

  • srcdoc作为HTML5的一部分添加到 iframe 元素中,由 HTML5 doctype 触发

  • XHTML Transitional 不使用 HTML5 文档类型

使用编码数据:URI加上一个object向后兼容的元素,如下所示:

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 回答