OVH Cloud OVH Cloud

[Newbie] Acces de la source dans une frame

14 réponses
Avatar
1 connu
J'utilise une frame (id = "contenu" ) pour exécuter une application dynamique dont l'Url varie en fonction de son utilisation
(session + paramètres)
J'aimerais accéder à la dernière valeur de cet Url dynamique.

J'ai obtenu l'objet représentant la frame :
var frameContenu = this.frameElement.ownerDocument.getElementById("contenu");

Pour accéder à l'url, j'ai essayé :

- frameContenu.contentDocument.baseURI;

- frameContenu.contentDocument.URL;
- frameContenu.contentDocument.location.href;

Bien que le debugger (firebug) montre la valeur correcte, l'accès lance une exception "Permission refusée d'obtenir la propriété
HTMLDocument.baseURI".

Quel serait la bonne façon d'obtenir mon url dans le code JS ?

D'avance merci.

Pierre

4 réponses

1 2
Avatar
SAM
Le 5/25/09 5:22 PM, 1 connu a écrit :
Si contents contient un vrai url dynamique, l'instruction suivante :
top.contenu.location = contents[indexContent];


lance l'exception :
uncaught exception: Permission refusée d'appeler la méthode Location.toString



Ha?

essayer :
top.contenu.location.href = contents[indexContent];


Ou alors stocker les urls en encodé dans l'array ?

contents[indexContent] = escape(top.contenu.location);
ou :
contents[indexContent] = encodeURI(top.contenu.location);
contents[indexContent] = encodeURI(top.contenu.location.toString());

--
sm
Avatar
SAM
Le 5/25/09 3:37 PM, 1 connu a écrit :
"SAM" a écrit dans le message de news: 4a1a85b8$0$17062$

J'espère que l'accueil est bien sur le site 'monDomain' ?



euh non, c'est grave ? En fait c'est les applis qui sont dans un autre domaine que cette partie frame + js



C'est très grave !
Le JavaScript devrait refuser de te donner les urls des fichiers chargés
dans les cadres si ces fichiers viennent d'un autre domaine que celui où
est chargé le script JS.

if(frameUrlContenu) content[indexContent] = frameUrlContenu;



Je pense avoir un problème ici . l'array contents change tout seul.



L'array 'content' !

Ben ? sans doute que nom ... puisque tu demandes de le changer !

Est ce comme un pointeur et ainsi la modif de frameUrlContenu
est répercuté dans le 1ier objet de contents ?
Quel est l'effet de var ?



L'effet de var est d'instancier une nouvelle variable qui appartiendra à
son contexte :
- tout le code JS du fichier si en-dehors d'une fonction
(variable globale)
- seulement connu que du script de la fonction si dans une fonction.

il faut que contents et indexContent soient global. Donc il ne faut pas de var, juste ?



La variable est *toujours* globale si elle est déclarée en-dehors d'une
fonction.

var ou pas, si ce n'est pas déclaré dans une fonction ce sera du global.
si c'est déclaré dans une fonction, l'absence de var créera ou modifiera
la variable globale (qui sera très certainement un object de window).

et pourquoi y a t-il un span ?
à quoi sert-ce ?



Pour la partie du code qui changent le look des boutons mais je peux changer cette partie si ca pose problème



Ça "me" pose un pb dans la mesure où ça ne doit avoir aucune utilité.


function changeContent(noAppli) {
var frameUrlContenu = null;
frameUrlContenu = top.contenu.location ? top.contenu.location :




(...)
top.contenu.location = contents[indexContent];



Cela n'affiche pas ce qui est dans l'array contents !



Comment peux-tu le savoir ?
(alors que tu le fais se modifier sans cesse via JS)

J'ai des situations ou contents contient n fois la même url dynamique


> (suite au problème plus haut)

Normalement si tu n'as pas merdé dans les liens (plusieurs fois
changeContent(1) par exemple) ça ne devrait pas.

mais l'affichage dans le contenu est le barre de menu !!!



C'est quoi ça maintenant le barre de menu ?
Tu veux dire que ça affiche dans 'contenu' le fichier du cadre 'menu' ?

Ça c'est probablement parce que tu as laissé trainer un target="contenu"
- dans un ou des liens du cadre 'menu'
- dans la page de cadre <frame name="menu" target="contenu"
et que le onclick du lien n'a pas fait son boulot (le JS a un blème et
avorte) (le onclick n'a pas de return false) et n'a pas stoppé le href
du lien.

--
sm
Avatar
1 connu
Merci pour ton aide, mais javascript c'est trop fort pour moi. J'abandonne pour l'instant et je vais chercher une autre idée pour
faire ca autrement ....

"SAM" a écrit dans le message de news: 4a1aca37$0$12631$
Le 5/25/09 5:22 PM, 1 connu a écrit :
Si contents contient un vrai url dynamique, l'instruction suivante :
top.contenu.location = contents[indexContent];


lance l'exception :
uncaught exception: Permission refusée d'appeler la méthode Location.toString



Ha?

essayer :
top.contenu.location.href = contents[indexContent];



NS_ERROR_XPC_BAD_CONVERT_JS


Ou alors stocker les urls en encodé dans l'array ?

contents[indexContent] = escape(top.contenu.location);
ou :
contents[indexContent] = encodeURI(top.contenu.location);
contents[indexContent] = encodeURI(top.contenu.location.toString());



uncaught exception: Permission refusée d'appeler la méthode Location.toString
--
sm


Avatar
1 connu
"SAM" a écrit dans le message de news: 4a1ad0de$0$12623$
Le 5/25/09 3:37 PM, 1 connu a écrit :
"SAM" a écrit dans le message de news: 4a1a85b8$0$17062$

J'espère que l'accueil est bien sur le site 'monDomain' ?



euh non, c'est grave ? En fait c'est les applis qui sont dans un autre domaine que cette partie frame + js



C'est très grave !
Le JavaScript devrait refuser de te donner les urls des fichiers chargés dans les cadres si ces fichiers viennent d'un autre
domaine que celui où est chargé le script JS.

if(frameUrlContenu) content[indexContent] = frameUrlContenu;



Je pense avoir un problème ici . l'array contents change tout seul.



L'array 'content' !

Ben ? sans doute que nom ... puisque tu demandes de le changer !



Dans le debug, contents est changé en dehors de mon code. Mystère

Est ce comme un pointeur et ainsi la modif de frameUrlContenu est répercuté dans le 1ier objet de contents ?
Quel est l'effet de var ?



L'effet de var est d'instancier une nouvelle variable qui appartiendra à son contexte :
- tout le code JS du fichier si en-dehors d'une fonction
(variable globale)
- seulement connu que du script de la fonction si dans une fonction.

il faut que contents et indexContent soient global. Donc il ne faut pas de var, juste ?



La variable est *toujours* globale si elle est déclarée en-dehors d'une fonction.

var ou pas, si ce n'est pas déclaré dans une fonction ce sera du global.
si c'est déclaré dans une fonction, l'absence de var créera ou modifiera la variable globale (qui sera très certainement un object
de window).



C'est clair merci.

et pourquoi y a t-il un span ?
à quoi sert-ce ?



Pour la partie du code qui changent le look des boutons mais je peux changer cette partie si ca pose problème



Ça "me" pose un pb dans la mesure où ça ne doit avoir aucune utilité.


function changeContent(noAppli) {
var frameUrlContenu = null;
frameUrlContenu = top.contenu.location ? top.contenu.location :




(...)
top.contenu.location = contents[indexContent];



Cela n'affiche pas ce qui est dans l'array contents !



Comment peux-tu le savoir ?
(alors que tu le fais se modifier sans cesse via JS)



toujours d'après le debuger, ca n'est pas coerent avec les valeurs contenus dans contents

J'ai des situations ou contents contient n fois la même url dynamique (suite au problème plus haut)



Normalement si tu n'as pas merdé dans les liens (plusieurs fois changeContent(1) par exemple) ça ne devrait pas.

mais l'affichage dans le contenu est le barre de menu !!!



C'est quoi ça maintenant le barre de menu ?
Tu veux dire que ça affiche dans 'contenu' le fichier du cadre 'menu' ?



exactement,ca arrive quand il y a une exception lors du top.contenu.location = contents[indexContent];

Ça c'est probablement parce que tu as laissé trainer un target="contenu"



effectivement, je ne l'ai avez pas enlevé mais ca n'a pas l'air de regler mes 2 problèmes

- dans un ou des liens du cadre 'menu'
- dans la page de cadre <frame name="menu" target="contenu"
et que le onclick du lien n'a pas fait son boulot (le JS a un blème et avorte) (le onclick n'a pas de return false) et n'a pas
stoppé le href du lien.

--
sm


1 2