1

同じページでMathJaxとjQueryMobileを組み合わせると、いくつかの問題があるようです。MathJaxが正しくレンダリングされる場合とそうでない場合があります。これは、同じページで発生する可能性があります。

両方をロードするHTMLは次のようになります。

<script type='text/javascript' src='http://code.jquery.com/jquery.min.js'>
</script> 
<script type='text/javascript'
        src='http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js'>
</script> 
<link rel='stylesheet' type='text/css'
      href='http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css' /> 
<script src='/beta/mathjax/MathJax.js'>
</script>

ここでサンプルページを見ることができます:http ://stackmobile.com/beta/math.stackexchange.com/questions/view/?id = 47772

編集: MathJaxがAJAXを介してロードされている新しいページを認識しないという問題のようです-これは機能していないように見える例です:http://stackmobile.com/beta/#/beta/physics.stackexchange。 com / question / view /?id = 11678

4

2 に答える 2

0

これがスクリプトを追加するためのより簡単でより良い方法であるかどうかはわかりませんが、私が見つけたものは次のとおりです。

(テストされていません)たぶん(あなたの投稿を使用して:モバイルサイトでjQuery MobileとMathJaxを組み合わせる?

$('#page_id').live('pageshow', function(event, ui) {
    $.getScript('http://path_to_mathjax/MathJax.js', function() { 
        callback(); 
    });
});

var mathjax_loaded = false;
function callback()
{
    if(mathjax_loaded)
        MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
    else
    {
        MathJax.Hub.Startup.onload();
        mathjax_loaded = true;
    }
}
于 2011-06-30T13:28:20.267 に答える
0

さて私は解決策を見つけました...そしてそれは次のようになります:

  • まず、ページに一意の番号を割り当てます。これらのページはPHPで生成されるため、これはを使用して実行できますuniqid()
  • pageshowイベントに次の機能を割り当てます。

    $('#page_id').live('pageshow', function(event, ui) {
        var script = document.createElement('script');
        script.type   = 'text/javascript';
        script.src    = 'path_to_mathjax/MathJax.js';
        script.onload = callback;
        document.getElementsByTagName('head')[0].appendChild(script);
    });
    

    これにより、MathJaxが読み込まれ、DOMに挿入されます。このスクリプトはpage要素に含まれている必要があります。また、「コールバック」についても言及していることに注意してください。これは、スクリプトがロードされるときに呼び出されます。

  • この関数(コールバック)は、ページのに出る必要があります。これにより、新しいページが読み込まれた後に2回含まれるのを防ぐことができます。

    var mathjax_loaded = false;
    function callback()
    {
        if(mathjax_loaded)
            MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
        else
        {
            MathJax.Hub.Startup.onload();
            mathjax_loaded = true;
        }
    }
    

    ここにはたくさんあります。まず、このコールバックが以前に一度呼び出されたかどうかを追跡します。window.onloadそうでない場合は、イベントから呼び出されたかのようにページを解析するようにMathJaxに指示します。これがすでに発生している場合(そして新しいページを表示している場合)、MathJaxで新しいページを実行する必要があります。

私はおそらく何かが足りないので、これを行うためのより良い方法があるかもしれません。しかし、私は他にうまくいく方法を見つけていません。

于 2011-06-30T05:13:30.470 に答える