J'ai en fait écrit ce code.
Lorsque vous essayez de faire une comète inter-sous-domaine / port, l'iframe doit avoir la même document.domain
valeur que la trame parent. Malheureusement, le navigateur stocke le nom de domaine ET le port en interne pour la document.domain
valeur d' origine . Mais le getter et le setter en javascript ne savent rien du port. Le problème est donc le suivant: si le cadre supérieur document.domain
est ('example.com', 80)
, et le cadre inférieur ('comet.example.com', 80)
, comment obtenez-vous également le cadre inférieur ('example.com', 80)
?
Vous ne pouvez pas, car la modification de la partie du nom d'hôte entraînera nécessairement la définition du port null
, donc le mieux que vous puissiez faire est ('example.com', null)
dans le cadre inférieur. Ainsi, le cadre supérieur doit également être défini sur cette valeur, et le paramètre document.domain=document.domain
fait exactement cela. Il modifie la représentation interne dans le navigateur de ('example.com', 80)
à ('example.com', null)
, puis tout correspond et la communication de trame entre ports / sous-domaines fonctionne.
Les navigateurs font la distinction entre (a) document.domain lorsqu'il n'est pas défini explicitement et (b) document.domain lorsqu'il est défini explicitement ... même s'ils retournent la même valeur.
La définition explicite de la valeur indique l'intention de "coopérer" avec un script sur un autre sous-domaine (sous le même domaine parent).
Si LA page parente ET le script externe définissent explicitement document.domain sur la même valeur, la restriction de politique de même origine peut être contournée et chaque script peut accéder à tous les objets et propriétés (autrement restreints) des contextes les uns des autres.
la source
J'ai trouvé les informations suivantes sur ce site: devguru . Plus concrètement, voici la citation:
Il me semble que cela permet la création de scripts intersites pour le même domaine (même si le sous-domaine est différent).
Je suppose que si vous ne touchez pas document.domain, le moteur js n'autorise que d'autres javascripts du même domaine. Avec cette propriété, vous serez en mesure de déployer sur d'autres sous-domaines comme l'état des documents en orbite.
la source
document.domain = document.domain
n'est pas un NOOP.Le
document.domain
extrait une valeur par défaut de l'URL réelle s'il n'est pas défini explicitement. Les navigateurs enregistreront sidocument.domain
elle provient par défaut de l'URL ou si elle a été explicitement définie. Les deux doivent être une valeur par défaut pour le même domaine ou les deux doivent être explicitement définis sur le même domaine pour que cela fonctionne. Si l'un est défini par défaut et que l'autre est défini explicitement, les deux correspondant s'ils sont lus, il sera toujours interdit aux deux pages de se parler.Voir: https://developer.mozilla.org/en-US/docs/DOM/document.domain
la source