Ce qui est génial dans le monde du développement c’est qu’il est possible d’utiliser le travail d’autrui pour faire notre travail. Mais cela ne fonctionne pas toujours du premier coup (voire jamais). Aujourd’hui j’ai voulu intégrer un superbe test de bande passante en javascript.
Tout de suite je me dis c’est du web worker, je n’en ai jamais fait sur une application ios avec cordova. Mais dans l’absolu c’est du javascript, donc je me rends sur github et j’intègre le petit js. Et la surprise après 2 ou 3 calages cela fonctionne très bien ! Sur chrome…
Et oui comme le build est plus long, je teste sur le navigateur d’abord puis je réalise le build..
Et là, misère ! Rien ne fonctionne sur l’appli.
Après 2h de recherches (googlage), tests, debugs, compilations, etc… J’apprends plusieurs choses :
- On ne peut pas faire de web worker en local avec cordova, c’est-à-dire charger un web worker dans le dossier de mon js
- Par contre on peut le faire fonctionner avec un Blob
- Il n’est pas possible de charger un fichier externe sans que le serveur renvoie la same origin policy dans mon web worker (bon pour celle-ci je pense que vous le saviez déjà)
Penchons-nous un peu sur la technique du Blob, qui va nous permettre de créer une chaîne de caractères puis d’appeler cette chaîne comme s’il s’agissait d’un fichier javascript grâce à window.createObjectURL (ou bien window.webkitURL.createObjectURL pour les navigateurs utilisant webkit).
Nous pourrions utiliser une variable pour créer notre chaîne de caractères. Mais écrire tout notre javascript ainsi n’est pas pratique. Il vaut mieux utiliser une balise script et récupérer le contenu sous forme de texte.
Dans notre script principal nous pouvons maintenant instancier le web worker
var blob = new Blob([document.querySelector('#monWorker').textContent]); var worker = new Worker(window.URL.createObjectURL(blob)); worker.onmessage = function(e) { console.log(e.data); } worker.postMessage();
Voila vous savez maintenant comment utiliser un web worker avec cordova, plus besoin de chercher partout parce que le nom du fichier passé en paramètre n’est pas trouvé, le Blob est votre ami.