Определить, когда MathJax завершил загрузку в UIWebView

У меня есть интерфейс, который состоит из нескольких UIWebView, все из которых динамически загружаются HTML, наполненным Javascript MathJax, которые используются для отображения довольно многих уравнений в окне.

MathJax хранится локально и анализируется с помощью метода, описанного в этом руководстве: http://new2objectivec.blogspot.co.uk/2012/03/tutorial-how-to-setup-mathjax-locally.html

К сожалению, я не разбираюсь в javascript, и скрипты MathJax, похоже, загружаются в NSStrings через довольно запутанный процесс хранения временных файлов HTML и последующей их передачи обратно в UIWebViews (как описано в учебнике).

Это меня немного сбивает с толку, но работает отлично, хотя и с довольно скромным временем загрузки (в зависимости от количества загружаемых уравнений).

Я хочу знать, когда MathJax прекратил работу и полностью загрузился.

Я пробовал прослушивать метод didFinishLoading в делегате безрезультатно: вызывается только пару раз (для каждого веб-просмотра), даже тогда вызовы слишком рано. Во всяком случае, я не могу разобраться в нескольких вопросах SO, которые задают о проверке, когда javascript завершил загрузку в UIWebView.

Размещение временного представления загрузки перед UIWebViews, пока MathJax творит свою магию, было бы абсолютно идеально, чтобы избежать путаницы у пользователей. Однако, как вы, наверное, догадались, у меня большие проблемы с его обнаружением.

Есть ли у кого-нибудь советы или опыт, связанные с работой с обнаружением загрузки MathJax / javascript в UIWebViews?

Любая помощь приветствуется, так как я, конечно, не хочу полагаться на произвольные NSTimers (т. Е. На «поддельные» загрузочные экраны).


person Sarreph    schedule 17.12.2012    source источник


Ответы (1)


Вы можете запустить функцию после того, как MathJax завершит набор, включив

<script>
MathJax.Hub.Queue(function () {
  ... your code here...
});
</script>

в вашем HTML-файле после скрипта, который загружает сам MathJax.js.

person Davide Cervone    schedule 17.12.2012
comment
Это здорово, я дополню свой вопрос некоторым кодом для контекста о том, как можно достичь полного решения ... Вы знаете, какая функция вызывается, когда MathJax начинает загрузку? У меня более одного UIWebView, поэтому мне нужно подсчитать количество завершенных загрузок. - person Sarreph; 18.12.2012
comment
Я не понимаю вопрос. Что вы имеете в виду, когда MathJax начинает загружаться? Загружается ряд различных вещей: сам MathJax.js, файл конфигурации, различные входные и выходные jax, расширения, шрифты, данные шрифтов и т. Д. Каждая из них загружается в разное время, поэтому это не так. мне ясно, что вам нужно. Вы, кажется, интересовались, когда MathJax будет завершен, на что я ответил выше. Если вам нужно синхронизироваться с MathJax, для этого можно использовать ...your code here.... Пусть этот код координирует ваши различные экземпляры UIWebView. - person Davide Cervone; 18.12.2012
comment
@DavideCervone Как это сделать в MathJax 3? - person Sr. Schneider; 14.01.2021
comment
@ Sr.Schneider, что объясняется в документации на выполнение действий после набора. - person Davide Cervone; 14.01.2021