dans un petit demande iframe-application au réseau social russe Ok.ru I Utilisez l'appel suivant pour redimensionner l'iframe: La hauteur iframe est actuellement codée en dur à Ça marche d'accord, mais j'aimerais utiliser la hauteur / la position de Quelqu'un veut-il avoir une idée, quelle fonction JavaScript ou CSS pourrait être utilisée ici - si je ne veux pas inclure JQuery Juste pour une $ (# FB-racine) .Offset () strong> appel? p>
4 Réponses :
QuirksMode a un didacticiel / fonction JavaScript indiquant comment trouver les coordonnées d'un élément ici a> p>
Une fois que vous avez ses coordonnées, vous pouvez utiliser la propriété offsetheight de l'iframe pour lire sa hauteur. P>
Cela ressemble à une solution solide, car il traverse le DOM de l'élément à travers tous ses conteneurs, qui devrait fonctionner même si l'élément en question a une hauteur de zéro - tant que certains des conteneurs ont une hauteur. Avez-vous une idée expliquant pourquoi elle a été votée?
Merci pour la réponse, j'ai mis à jour ma question avec le code de travail. Des idées pourquoi il échoue pour MSIE?
J'essaierais d'appeler Findtop dans la fenêtre.Load Event et éventuellement dans un appel de bouton séparé pour voir si elle donne des informations différentes. J'ai déjà entendu dire que c'est-à-dire que cE peut donner des informations incorrectes pour les propriétés de compensation si elle charge toujours le DOM. Une autre chose à essayer serait de définir position: par rapport à la "racine FB" div et à voir si cela vous donne une réponse différente. Si vous faites cela, vérifiez également la marge et le rembourrage de l'élément HTML.
Utilisez offSetheight strong> ou Utilisez offsetleft strong> et et offsettop strong> Pour obtenir la position de Div par rapport à son offset-parent fort>. offsetParent strong> est sa première boîte de parents que le style de position est fixe, relatif ou absolu. p> p>
Merci, mais getElementyid () travaille-t-il avec tous les navigateurs principaux?
OUI. Presque tous les navigateurs pris en charge GetElementByID B>. Voir ce lien
Malheureusement, les deux offsethteight et la clientèle sont imprimés comme 0 pour une raison quelconque - voir ma question mise à jour
Pouvez-vous coller complètement le contenu de # FB-root? Ou donnez-moi le lien de votre page de test que je peux accéder.
L'adresse est Odnoklassniki.ru/game/preferans (je suis désolé - c'est à la Russe Facebook-Clone). Lorsque j'interroute ("xxx" + document.getelementByID ("FB-racine"). Clientheight); Il imprime "xxx 0". L'ID
Êtes-vous sûr que # FB-root a déjà du contenu lorsque vous obtenez sa hauteur? Si vous utilisez Safari ou Chrome (ou utilisez Firebug dans Firefox), vous pouvez exécuter Document.getElementByID ("FB-ROOT"). OffSetheight B> Dans la console de l'outil de développeur pour vérifier si cela fonctionne. Bonne chance.
FB-ROOT N'A PAS DE CONTENU, mais lorsque je mets xxx dans celui-ci:
si J'ai C'était un coup d'oeil à Fapi.js, et il semble que l'appelant la fonction Fapi.init crée une étendue que ID est "Fapi_flash_wrap", ajoute-le sur le corps du document, puis incorpore un objet Flash avec ID "FAPI_FLASH" dans cette portée. . P> Je vais donc essayer de récupérer un élément avec ID "FAPI_FLASH_WRAP" ou "FAPI_FLASH" au lieu de "FB-ROOT": P> document.getelementByID ("FB-racine"). Clientighight code> retourne 0, cela signifie certainement que votre "FB-racine" div est non affichée ou non vide.
<script type="text/javascript">
FAPI.init("http://api.odnoklassniki.ru/", "XXX_YYY",
function() {
var height = document.getElementById("FAPI_Flash_wrap").offsetHeight;
var width = document.getElementById("FAPI_Flash_wrap").offsetWidth;
FAPI.UI.setWindowSize(width, height);
}, function(error){alert("API initialization failed");}
);
</script>
Je suis désolé, mais les alertes n'apparaissent pas du tout et la page n'est pas redimensionnée. Dans la console Firebug, je vois de nombreux avertissements mais aucune erreur correspondante. Lorsque j'ai remis mon code d'origine avec une hauteur codée à code grave - alors il fonctionne soudainement ok.
Hmm, étrange. Si vous essayez "alerte (document.getElementyID (single));" Dans la ligne de commande Firebug, il apparaîtra nécessairement «[Objet Quelqu'un) ou« Null »ou« NULL », vous pouvez donc vérifier si un élément d'identité« anormal »existe à ce moment. Si ni "fapi_flash_wrap" ni "fapi_flash" n'existe, peut-être le HTML complet de la page après avoir chargé avec succès le jeu serait utile.
En regardant le code dans jQuery , le Le décalage est calculé comme celui-ci:
function getOffset(element) { if (!element.getClientRects().length) { return { top: 0, left: 0 }; } let rect = element.getBoundingClientRect(); let win = element.ownerDocument.defaultView; return ( { top: rect.top + win.pageYOffset, left: rect.left + win.pageXOffset }); }
Merci beaucoup. Ça fait sauver mon temps de temps
S'il vous plaît ne postez pas d'URLS que 1.) nécessitent une inscription 2.) sont en russe ... :)) C'est plutôt inutile.
Qu'en est-il des questions Facebook? Il y en a beaucoup ici et ils ont besoin d'inscription.
Mais tout le monde est sur FB, il ne faut donc pas vraiment vous inscrire si vous voulez vous aider. Et ce n'est certainement pas en russe (seulement). :)
Peu importe, s'il s'agit d'un réseau social russe, hongrois ou américain. J'essayais de résoudre un problème JavaScript / Iframe et j'ai fourni suffisamment d'informations au début et plus tard. Si vous consultez mes autres questions ici chez Stackoverflow, vous verrez que je le faisiez toujours (fournissez suffisamment d'informations et de tests de test et de répondre à chaque commentaire lorsque vous demandez quoi que ce soit).