2011-01-08 6 views
9

Chciałbym wywołać funkcję javascript Print(), gdy biblioteka js kończy przetwarzanie odwiedzanej strony internetowej.Jak uruchomić funkcję javascript, gdy "Matematyka przetwarzania" w MathJax osiąga 100%

W tej chwili funkcja Print() jest wyzwalana przy użyciu onload, ale wydaje się, że zatrzymuje zadanie Matematyka przetwarzania MathJax (demo here); użytkownicy muszą odrzucić okienko Pop-up przeglądarki, aby umożliwić MathJax zakończenie przetwarzania.

Chciałbym móc zadzwonić pod numer Print() właśnie wtedy, gdy przetwarzanie matematyki w MathJax osiągnie 100%.
Jakieś pomysły?

Odpowiedz

12

Przekaż polecenie Drukuj do kolejki przetwarzania MathJax, aby zostało wywołane po zakończeniu składni strony MathJax. Np

MathJax.Hub.Queue(Print); 

lub

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

Zobacz dokumentację na

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

więcej szczegółów.

+0

@Davide prawie :), to działa, ale kiedy pojawi sie okno dialogowe drukarki Processing matematyczne: 100% nie zniknie. Czy znasz jakiś sposób, aby się go pozbyć? – systempuntoout

+0

Upewnij się, że wyciągasz komunikator ON-ON dla ciała, które również wywołuje Print. Wywoływane jest przed załadowaniem MathJax (i przed wydrukiem, który jest w kolejce poprzez MathJax, –

+0

Twoja strona demo powiązana z twoją oryginalną wiadomością wciąż ma onload = "Print()" na znaczniku BODY. I nie widzę Wywołanie MathJax.Hub.Queue() Czy testujesz na innej stronie? Nie jestem też pewien, dlaczego używasz javascripts/mathjax.js, a nie tylko ładowanie bezpośrednio javascripts/MathJax/MathJax.js. wywołanie MathJax.Hub.Queue() tej procedury w celu upewnienia się, że MathJax będzie dostępny po wywołaniu. –

2

Obszar komunikatu MathJax ma opóźnienie, zanim zostanie usunięty, aby można było go odczytać. Wywołanie Print() najwyraźniej blokuje javascript, który usunąłby wiadomość. Musisz więc dodać własne opóźnienie przed uruchomieniem Print(). Myślę, że opóźnienie wiadomości wynosi 600 ms, więc jeśli zmienisz połączenia

MathJax.Hub.Queue(Print); 

do

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

wtedy powinien opóźnić rozmowy Print() aż po wiadomość zostanie usunięta.

Davide

+0

działało idealnie, dziękuję – systempuntoout

+0

Nie zapomnij usunąć wywołania 'MathJax.Hub.Startup.onload();' z twojego skryptu, który ładuje MathJax. Dzieje się tak tylko wtedy, gdy wstawiasz MathJax do strony * po * jest załadowany, nie wtedy, gdy ładujesz go w standardowy sposób przez znacznik skryptu w nagłówku dokumentu. –

Powiązane problemy