【问题标题】:How to trigger a javascript function when "Processing Math" in MathJax reaches 100%当 MathJax 中的“处理数学”达到 100% 时如何触发 javascript 函数
【发布时间】:2011-06-05 17:13:44
【问题描述】:

当 js 库 MathJax 完成处理访问的网页时,我想调用一个 javascript Print() 函数。

目前Print()函数是使用onload触发的,但它似乎停止了MathJax的处理数学任务(演示here);用户需要关闭浏览器的打印弹出窗口以让 MathJax 完成其处理。

我希望能在 MathJax 中的数学处理达到 100% 时调用 Print()
有什么想法吗?

【问题讨论】:

    标签: javascript printing callback mathjax


    【解决方案1】:

    将 Print 命令推送到 MathJax 处理队列,以便在 MathJax 完成页面排版后调用它。例如,

    MathJax.Hub.Queue(Print);
    

    MathJax.Hub.Queue(function () {
      // do stuff here
      Print();
    });
    

    查看文档

    http://www.mathjax.org/resources/docs/?queues.html#the-mathjax-processing-queue

    了解更多详情。

    【讨论】:

    • @Davide 几乎 :),它可以工作,但是当打印机对话框弹出时处理数学:100% 不会消失。你知道有什么办法可以摆脱它吗?
    • 确保取出 body 的 onload 处理程序,它也调用 Print。它在加载 MathJax 之前被触发(以及在通过 MathJax 排队的打印之前。
    • 链接到原始消息的演示页面的 BODY 标签上仍然有 onload="Print()"。而且我没有看到 MathJax.Hub.Queue() 调用。你是在不同的页面上测试吗?另外,我不确定你为什么使用 javascripts/mathjax.js 而不是直接加载 javascripts/MathJax/MathJax.js。您需要将 MathJax.Hub.Queue() 调用添加到此例程,以确保在进行调用时 MathJax 可用。
    • @Davide 我已解决暂时删除所有消息的问题。演示here
    • 好的。您的早期版本(在 1e)仍然具有用于加载 MathJax 的 mathjax.js 文件,并且仅设置加载,并且该脚本在实际加载 MathJax 之前完成,因此 Queue() 调用的下一个脚本失败,因为 MathJax尚未定义。您的正确版本通过正确加载 MathJax.js 来解决这个问题。 (但是,您需要删除 MathJax.Hub.Startup.onload(),因为这仅用于在页面加载后加载 MathJax。)
    【解决方案2】:

    MathJax 消息区域在被删除之前有一个延迟,以便您可以实际阅读它。 Print() 调用显然会阻止将删除消息的 javascript。所以你需要在运行Print()之前添加你自己的延迟。我认为消息延迟是 600 毫秒,所以如果你改变你的

    MathJax.Hub.Queue(Print);
    

    打电话给

    MathJax.Hub.Queue(
      ["Delay",MathJax.Callback,700],
      Print
    );
    

    那么这应该会延迟您的 Print() 呼叫,直到消息被删除。

    大卫

    【讨论】:

    • 不要忘记从加载 MathJax 的脚本标签中删除 MathJax.Hub.Startup.onload(); 调用。这仅适用于当您将 MathJax 插入页面之后加载它时,而不是当您通过文档头部中的脚本标记以标准方式加载它时。
    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 2021-08-10
    • 2017-12-03
    • 2011-12-07
    • 2018-07-31
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多