MathJax不会在iframe中呈现

时间:2015-08-18 14:09:21

标签: javascript iframe mathjax

我想让MathJax在iframe中呈现。 Here is a fiddle举了一个简单的例子。你可以看到" MathJax loading"运行小提琴时底部的横幅,但iframe中的文本未呈现。 (应该像附加的图像一样呈现)。

expected output

我的代码转载于此:

HTML:

$my_array = $array_data;
print_r($my_array);
//Here it showed the array like the above

foreach($my_array as $array_key) {
    foreach( $array_key as $array_value) {
        var_dump($array_value);
    }
}

的javascript:

<iframe id="my-frame" srcdoc="<div>This is \(\mu_s\). </div>">

我查看了SO question here,但我的情况似乎有所不同(因为我在iframe中调用MathJax Typeset)。同样,this old Google thread表示我需要在iframe中加载MathJax脚本,我已经在做了。 MathJax docs表示在尝试排队动态内容的渲染时我应该调用var mathJax = 'https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full', script = document.createElement('script'), initScript = document.createElement('script'); script.type = 'text/javascript'; script.src = mathJax; initScript.type = 'text/javascript'; initScript.text = '$(document).on("ready", function () {MathJax.Hub.Queue(["Typeset",MathJax.Hub]);});'; $('#my-frame').contents().find('head').append(script); $('#my-frame').contents().find('body').append(initScript); ,我正在做(虽然我怀疑我可能不需要手动排队排版?)。 MathJax加载在每个iframe的MathJax.Hub.Queue(["Typeset",MathJax.Hub]);脚本as recommended

不太确定还有什么可以尝试,任何帮助将不胜感激。我在控制台中看到的错误是<head>,这让我觉得它在iframe中没有正确加载...

谢谢!

2 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。首先,你不需要initScript,因为MathJax会自动运行一次(即使你这样做了,因为jQuery没有加载到iframe中,你无论如何都不能$(document).on())。此外,您应该在iframe的文档中创建脚本元素,而不是外部文档(它们不相同)。

否则,你是在正确的轨道,但事实证明,jQuery以某种方式搞砸了你。 append()调用做了一些有趣的事情,MathJax最终在外部窗口运行,而不是内部窗口。我不确定这是怎么回事,但解决方案是使用常规appendChild()方法而不是jQuery。所以,如果你使用

var doc = $('#my-frame').contents()[0];

var script = doc.createElement('script');
script.type = 'text/javascript';
script.src = 'https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full';

// $('#my-frame').contents().find('head').append(script);  // this is the line that is causing trouble.
doc.head.appendChild(script);

它应该对你有用(它对我有用)。

答案 1 :(得分:0)

我通过编辑源文档本身来完成这项工作,而不是在事后注入MathJax ...... working fiddle.

<iframe id="my-frame" srcdoc="<html><head><script src='https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full'></script></head><body><div>This is \(\mu_s\). </div></body></html>">