2009-10-11 7 views
3

Je n'ai pas été en mesure d'obtenir quelque chose comme cela fonctionne:Puis-je charger un script de travail Web à partir d'une URL absolue?

var myWorker = new Worker("http://example.com/js/worker.js"); 

Dans ma console Firebug, je reçois une erreur comme ceci:

Impossible de charger le script: http://example.com/js/worker.js (nsresult = 0x805303f4)

Chaque exemple d'utilisation de l'outil Web que j'ai vu charge un script à partir d'un chemin relatif. J'ai essayé quelque chose comme ça, et il fonctionne très bien:

var myWorker = new Worker("worker.js"); 

Mais si je dois charger un script de travail qui n'est pas à un emplacement relatif? J'ai fait de nombreuses recherches sur Google, et je n'ai jamais vu ce problème ailleurs.

Je devrais ajouter que j'essaye de faire ceci dans Firefox 3.5.

+0

Bonjour, pouvez-vous élaborer et nous en dire plus sur la classe des travailleurs? cela ne fonctionne-t-il pas dans FF3.5 seulement ou tous les navigateurs? – mauris

+0

Voici la documentation officielle de Mozilla sur la classe Worker: https://developer.mozilla.org/En/DOM/Worker Firefox est le seul navigateur qui m'intéresse. Je veux éventuellement utiliser des web workers dans un script Greasemonkey sur lequel je travaille. – mattblodgett

Répondre

8

Pour ceux qui ne connaissent pas, voici les spécifications pour les travailleurs Web: http://www.whatwg.org/specs/web-workers/current-work/

Et un poste par John Resig: http://ejohn.org/blog/web-workers/

Javascript, généralement, ne peut accéder à quoi que ce soit en dehors de l'URL que le fichier javascript est venu.

Je crois que est ce que cette partie de la spécification signifie, à partir de: http://www.w3.org/TR/workers/

4.2 Base URLs and origins of workers 

Both the origin and effective script origin of scripts running in workers are the origin of the absolute URL given in that the worker's location attribute represents. 

Ce poste a une déclaration au sujet de l'erreur qui devrait être jeté dans votre situation: http://canvex.lazyilluminati.com/misc/cgi/issues.cgi/message/%[email protected]%3E

+0

La signification de "origine" est un peu floue. Si vous regardez la documentation de WHATWG, où il traite de "l'origine", il y a cette remarque: "Ainsi, les scripts doivent être des fichiers externes avec le même schéma que la page d'origine: vous ne pouvez pas charger un script depuis une donnée: javascript: l'URL et une page https: n'ont pas pu démarrer les utilisateurs à l'aide de scripts avec des URL http:." Check it out au point # 3 ici: http://www.whatwg.org/specs/web-workers/current-work/#worker – mattblodgett

+0

J'ai trouvé le post sur le message d'erreur manquant intéressant pour cette raison, comme vous avez raison, cela semble être plus ambigu que je ne voudrais voir dans une spécification. Je pense que le modèle de sécurité javascript sera le problème, mais, étant donné qu'il existe des moyens de contourner ce problème, vous pouvez essayer de Travailler sur le chargement des fichiers javascript à partir d'autres URL, puis voir si le travailleur Web fonctionne à partir d'une URL absolue –

+0

"... vous pouvez essayer de contourner le chargement de fichiers javascript à partir d'autres URL, puis voir si le travailleur Web fonctionne à partir d'une URL absolue "Je ne comprends pas le genre de solutions de contournement dont vous parlez – mattblodgett

3

Selon le Web Worker draft specification, les travailleurs doivent être hébergés sur le même domaine que le "first script", c'est-à-dire le script qui crée le worker. L'URL du premier script correspond à la résolution de l'URL du worker.

+0

Etes-vous sûr de la " premier script "chose représente toujours les spécifications actuelles? – saaj

0

Sans parler ...

À peu près chaque fois que vous avez une politique de restriction croisée origine, il n'y a pas au système de contrepoids de fichiers (fichier: //path/to/file.ext) - Signification, la Le protocole de fichier déclenche la gestion de cette politique.

Cela vaut également pour les "images incorrectes" dans l'API Canvas.

Espérons que cela aide =]

Questions connexes