2010-01-28 7 views
0

-je utiliser javascript pour développer un Iframe à la taille du document, il charge pour enlever toute la barre de défilement vertical, comme ceci:Growing un Iframe en fonction de la source à l'intérieur (ce qui est un autre serveur)

function resizeIframes() { 
    $('iframe').load(function() 
     { 
      this.style.height = (this.contentWindow.document.body.offsetHeight + 40) + 'px'; 
     } 
    ); 
} 

qui fonctionne assez bien pour mes utilisations. Mais maintenant, je dois charger le Iframe avec un site Web d'un autre serveur (en fait un autre sous-domaine, au lieu de « www.mydomain.com » il est « services.mydomain.com ») et selon Firebug je ne suis pas autorisé à lire les propriétés de d'autres domaines via Javascript. Je devine une sorte de problème de bac à sable ?!

est-il un moyen de contourner ce ou au moins obtenir une sorte d'information sur la taille du contenu? Je serais même prêt à vérifier s'il y a une barre de défilement et à augmenter continuellement l'iframe jusqu'à ce qu'il soit parti, mais contrairement à l'objet window, un objet iframe ne semble pas avoir de propriété .scrollbars.

Répondre

0

Si c'est juste un autre sous-domaine, document.domain devrait vous donner l'accès nécessaire entre les cadres.

+0

Oui, si vous le faites 'document.domain = « mydomain.com »,' à l'intérieur du iFrame document * et * à partir du document principal, cela devrait fonctionner. Autant que je sache, vous ne pouvez définir document.domain à partir de chaque document (vous ne pouvez pas définir le domaine d'un autre cadre de/la fenêtre de la propriété), et le seul changement est autorisé à dépouiller les sous-domaines de celui-ci (vous pouvez changer www.mydomain.com à mydomain.com , mais pas l'inverse, et vous ne pouvez pas changer complètement le domaine) – Graza

+0

notez que document.domain ne fonctionne pas pour toutes les versions d'IE –

1

Je suis désolé si vous trouvez cette réponse incomplète (il est). Je n'ai tout simplement pas d'échantillons de code avec moi. Je vais esquisser le concept principal et vous devrez remplir les détails vous-même.

Vous devez utiliser quelques astuces pour le faire car la sécurité XSS ne permet pas les cadres d'un site pour accéder à des cadres d'un autre site:

  • site1: page1: appel iframe (site2:page1) sur site deux. Supposons que la propriété iframe ID est "myframe".

  • site2: page1: exécuter JavaScript (en body.onload) pour calculer la taille de la vue actuelle (je pense que vous devriez utiliser document.scrollTop etc.). Également exécuter un iframe (site1:page2) en passant la largeur nécessaire dans la chaîne de requête.

  • site1: page2: lire la chaîne de requête et trouver la hauteur demandée, la mise à jour parent.parent.document.getElementById("myframe").style.height

+0

Si cela fonctionne (je ne suis pas sûr parce que l'un des 'parent' est en territoire interdit Avez-vous testé.?): * Clever * pensée. Chapeau. Besoin de garder cela à l'esprit. Cependant, ce spécifique peut être résolu plus facilement parce que c'est un sous-domaine. –

+0

l'astuce parent.parent travaille pour moi en production dans tous les principaux navigateurs (non testé dans IE8 mais devrait fonctionner). faire attention à l'utilisation document.domain car il ne fonctionne pas dans certaines versions de IE (je pense que IE6 Win XP SP1) - même pour les sous-domaines –