Недавно я работал над игрой, совместимой с CocoonJS, с DOM, ограниченным элементом canvas - вот мой подход:
Использование fillText со шрифтом, который еще не был загружен, будет работать правильно, но без визуальной обратной связи - поэтому плоскость холста останется нетронутой - все, что вам нужно сделать, это периодически проверять холст на наличие каких-либо изменений (например, циклически проходя через getImageData поиск любого непрозрачного пикселя), который произойдет при правильной загрузке шрифта.
Я объяснил эту технику немного подробнее в моей недавней статье http://rezoner.net/preloading-font-face-using-canvas,686