47 votes

Comment obtenir l'emplacement actuel d'un iframe?

J'ai construit une application de saisie de données de base permettant aux utilisateurs de parcourir du contenu externe dans un iframe et de saisir rapidement des données à partir de la même page. Une des variables de données est l'URL.

Idéalement, j'aimerais pouvoir charger l'URL actuelle de l'iframe dans un champ de texte avec du javascript. Je me rends compte maintenant que cela ne se produira pas en raison de problèmes de sécurité.

Est-ce que quelqu'un a fait quelque chose du côté serveur ? ou connait des contrôles de navigation dans le navigateur .Net. L'objectif ultime est simplement de donner à l'utilisateur une méthode facile d'extraire l'url de la page qu'ils consultent dans l'iframe. Ce n'a pas nécessairement à être un iframe, un navigateur dans le navigateur serait idéal.

Merci, Adam

1voto

SparK Points 989

J'ai eu le même problème, ce que j'ai fait était (en utilisant jquery) de sélectionner tous les éléments dans le body et de définir le css display sur none (pour ne pas afficher mes éléments en arrière-plan ou quelque chose comme ça), puis j'ai obtenu l'iframe et l'ai positionné en position absolue avec top 0 et left 0, width à 100% et height à 100%, enlevant la bordure (border: "none"), le padding et la marge.

résultat :

    function zoomResults(){
        $("body *").css("display","none");
        $("#googleFrame").css({
            position:"absolute",
            left:"0",
            top:"0",
            width:"100%",
            height:"100%",
            margin:"0",
            padding:"0",
            display:"table",
            border:"none"
        });
    }

0voto

Est-ce que cela t'aide?

http://www.quirksmode.org/js/iframe.html

J'ai seulement testé ceci dans Firefox, mais si tu as quelque chose comme ceci :

tu peux obtenir son adresse en utilisant:

document.getElementById('myframe').src

Je ne suis pas sûr d'avoir bien compris ta question mais bon :)

0voto

Thomas Hansen Points 3348

Vous pouvez utiliser Ra-Ajax et avoir un iframe enveloppé dans par exemple un contrôle Window. Bien que, en termes généraux, je n'encourage pas les gens à utiliser des iframes (pour rien du tout)

Une autre alternative consiste à charger le HTML sur le serveur et à l'envoyer directement dans la Window en tant que contenu d'un Label ou quelque chose d'autre. Découvrez comment ce parseur RSS Ajax charge les éléments RSS dans la source qui peuvent être téléchargés ici (Open Source - LGPL)

(Avertissement ; Je travaille avec Ra-Ajax...)

-1voto

Jon Points 1203

D'accord, donc dans cette application, il y a un iframe dans lequel l'utilisateur est fourni avec des liens ou une certaine capacité qui permet à cet iframe de naviguer vers un site externe. Vous cherchez ensuite à capturer l'URL que l'utilisateur a parcourue.

Une chose à garder à l'esprit. Étant donné que l'URL est vers une source externe, vous serez limité dans la mesure où vous pourrez interagir avec cet iframe via javascript (ou un accès côté client pour cette question), c'est ce qu'on appelle la sécurité de navigation entre domaines, comme vous l'avez apparemment découvert. Il existe des solutions astucieuses, comme présenté ici Javascript de croisement de domaine, de croisement de trame, bien que je ne pense pas que cette solution s'applique dans ce cas.

Tout ce à quoi vous pouvez accéder est la localisation, comme vous en avez besoin.

Je suggère de rendre le code présenté plus résilient et moins sujet aux erreurs. Essayez de naviguer sur le web parfois avec IE ou FF configuré pour afficher les erreurs javascript. Vous serez surpris de voir combien d'erreurs javascript sont générées, en grande partie parce qu'il y a beaucoup de javascript sujet aux erreurs, qui continue à proliférer.

Cette solution suppose que l'iframe en question est le même contexte "window" dans lequel vous exécutez le javascript. (C'est-à-dire, il n'est pas incorporé dans un autre cadre ou iframe, auquel cas, le code javascript devient plus compliqué, et vous devez probablement effectuer une recherche récursive dans la hiérarchie des fenêtres.)

</frame>
<input type='text' id='txtUrl' />
<input type='button' id='btnGetUrl' value='Obtenir URL' onclick='GetIFrameUrl();' />

<script language='javascript' type='text/javascript'>
function GetIFrameUrl()
{
    if (!document.getElementById)
    {
        return;
    }

    var frm = document.getElementById("frmExternal");
    var txt = document.getElementById("txtUrl");

    if (frm == null || txt == null)
    {
        // pas un excellent retour utilisateur mais légèrement mieux que des erreurs de script désagréables
        alert("Il y a eu un problème avec cette page, veuillez rafraîchir.");
        return;
    }

    txt.value = frm.src;
}
</script>
</code></pre>

<p>J'espère que cela vous aidera.</p></x-turndown>

-1voto

Vous pouvez accéder à la propriété src de l'iframe mais cela ne vous donnera que l'URL initialement chargée. Si l'utilisateur navigue dans l'iframe via vous devrez utiliser une HTA pour résoudre le problème de sécurité.

http://msdn.microsoft.com/en-us/library/ms536474(VS.85).aspx

Consultez le lien, en utilisant une HTA et en définissant la propriété "application" d'un iframe vous permettra d'accéder à la propriété document.href et d'extraire toutes les informations souhaitées, y compris les éléments du DOM et leurs valeurs si vous le souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X