Question

La scène : J'écris un Lecteur exportable. Il prend la forme d'une étiquette de <script>, qui construit un iframe contenant tout ce dont il a besoin pour afficher. Le iframe n'a pas src, et le script écrit avec theIframe.contentWindow.document.write(). Cela permet de maintenir le widget contenu et conserve ids des éléments et script en conflit avec la page sur laquelle le widget est intégré.

L'astuce : Le widget doit être en mesure de changer sa taille. Pour ce faire, il définit le contenant de son style.height iframe. Cela nécessite l'accès aux DOM de la page externe. Firefox et IE , cela est permis, parce que le document de l'iframe et le document externe sont considérés comme partager une origine.

La touche : Safari , cependant, les deux documents sont considérés comme pas pour partager une origine. Le document interne est considéré comme à about:blank, alors que le document externe utilise clairement un protocole différent et « domaine » (si blank peut être considéré comme le domaine).

La question : Comment puis-je construire un iframe programme dont le document Safari / WebKit considérera avoir la même origine que le document de la fenêtre sa création


Modifier :. Après une expérimentation plus loin, je ne peux pas trouver un moyen de créer un programme iframe dont l'emplacement est pas document.createElement() indépendamment du fait que je change son contenu

Si je crée le cadre avec document.body.appendChild(), donnez-lui un qui pointe vers foo.html une véritable ressource HTML sur l'origine même appelé « foo.html », et il document.write(), la console de Safari montre l'élément comme prévu dans les DOM, mais le contenu de la page ne semble pas, et le document est répertorié dans la barre latérale « about: blank ».

Si j'inclure le code HTML pour l'iframe directement dans la page, le contenu de apparaissent <=> et « foo.html » apparaît dans la barre latérale.

Si j'insérer le code HTML en utilisant <=>, j'obtenir le même résultat qu'avec <=>.

Les deux versions de programmation fonctionnent dans Firefox.

Était-ce utile?

La solution 2

Aha. Cela semble être un bogue dans WebKit. Quand un iframe est créé par programme, son attribut est ignoré src. Au lieu de cela, les paramètres par défaut de cadre à et doivent être about:blank dirigés vers une URL pour pointer ailleurs. Par exemple:

theIframe.contentWindow.location = theIframe.src

Autres conseils

La meilleure suggestion que je pourrais donner est d'avoir l'ensemble iframe à une page vierge sur le même serveur (c.-à-blank.html) puis modifier le contenu. Une douleur à l'arrière, je sais, mais c'est une solution de contournement.

Vous pouvez également essayer

iframe.contentDocument.open("replace");
iframe.contentDocument.write("<b>This is some content</b>");
iframe.contentDocument.close();

Cependant, je ne suis pas sûr si cela ne fonctionne que dans IE. Désolé, je ne pouvais pas être plus utile que cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top