MathJax:适用于桌面浏览器,但仅限于假冒用户代理;适用于移动浏览器

时间:2016-05-27 18:31:50

标签: javascript cross-platform user-agent mathjax

所以,我有这个页面(Wordpress博客的一部分), http://gnuradio.org/blog/filtering-time-series-data__elemental-building-blocks/应该包含我的LaTeX公式的渲染,完全像:

Firefox on Linux, pretending to have the User Agent string of an IPhone 3

当我配置桌面的Firefox以假装其用户代理是在Android上运行的Firefox时,它也是一样的(有效!)

可悲的是,如果不强迫我的firefox宣称其用户代理字符串是iPhone 3的字符串,那么公式永远不会被渲染; MathJax显示它是典型的“初始化消息”,但是在它们出现之前很久,“原始”LaTeX公式就会消失并且永远不会再渲染:

Firefox on Linux, not pretending to be someone else

现在,特别之处在于:它在Linux下也无法与Chrome配合使用,而且我有一位朋友报告了Safari / OS X的相同问题,但在Android设备上使用Firefox,它可以正常工作{ {3}}

同样适用于like a charm

所以,我尝试过调试的东西,但我还没有超越以下内容:

  • 网络请求似乎是相同的,响应也是如此,无论我在桌面PC上使用什么用户代理,除了事情有效之外,cdn.mathjax.org还有一些流量(这是预期,因为它加载webfonts)
  • 将渲染作业放入Mathjax Hub的{​​{1}}也无济于事。

根本不是网络开发者,这几乎是我已经走了多远。因此,同样欢迎关于如何调试/用于调试此问题或解决我的问题的明确答案的提示。

1 个答案:

答案 0 :(得分:2)

问题是您的网页正在加载修改网页中的脚本元素的代码(http://gnuradio.org/cdn-cgi/nexp/dok3v=1613a3a185/cloudflare/rocket.js,文件中标题为cloudflarejs-rocketloader-0.11.5。可能是cloudflare在您不知情的情况下自动添加但结果是页面中的脚本元素不再是浏览器实现的标准脚本DOM元素,而是由此脚本实现的替换。不幸的是,替换的行为与原始脚本元素不同,这导致MathJax无法读取数学(存储在页面中的脚本元素中)。

您可以通过添加

来克服这个问题
<script>
MathJax = {
  AuthorInit: function () {
    MathJax.HTML.getScript = function (node) {return node.textContent}
  }
};
</script>
在加载MathJax.js本身的脚本之前

页面。

或者,尝试disabling the full CloudFlare optimization