Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[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

10 réponses

1 2
Avatar
Laurent vilday
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 ?



Euh, je dis certainement une bêtise, mais ce serait pas tout simplement
la propriété "src" de la frame/iframe ?

--
laurent
Avatar
SAM
Le 5/22/09 7:00 PM, Laurent vilday a écrit :
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");





Ça m'étonnerait que ce soit ça, non ?
(ou alors c'est une frame imbriquée dans une autre ?)

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 ?



Euh, je dis certainement une bêtise, mais ce serait pas tout simplement
la propriété "src" de la frame/iframe ?



<https://developer.mozilla.org/En/DOM:window.frameElement>
ou, touj aussi mal expliqué, :
<http://msdn.microsoft.com/en-us/library/ms533771(VS.85).aspx>

à mon idée, on pourra bien tout essayer ce qu'on veut avec ce
'frameContenu' tel qu'indiqué sauf d'en retrouver l'url ...
(vu que ce doit être un div ou qque chose d'approchant et non pas le
cadre lui-même)

d'autant que je comprends que 'window.frameElement' doit s'appeller
depuis la frame/iframe et que partant de là elle doit bien déjà savoir
elle même quelle est l'url de la page y ouverte :

url = self.location;


Breffle, comme je n'arrive pas à savoir d'où s'appelle ce truc, voici :

function urlIframe() {
return = window.frameElement?
self.location :
document.getElementById('contenu').src;
}

qui pourra s'employer indifféremment dans la fille ou la mère.

<button onclick="alert(urlIframe())">url de l'iframe 'contenu'</button>


--
sm
Avatar
SAM
Le 5/22/09 11:23 PM, SAM a écrit :

function urlIframe() {
return = window.frameElement?



heu ... y a pas d'égale, normalement ! :-(

function urlIframe() {
return window.frameElement?
self.location :
document.getElementById('contenu')?
document.getElementById('contenu').src :
null;
}

--
sm
Avatar
1 connu
"SAM" a écrit dans le message de news: 4a172216$0$17767$
Le 5/22/09 11:23 PM, SAM a écrit :

function urlIframe() {
return = window.frameElement?



heu ... y a pas d'égale, normalement ! :-(

function urlIframe() {
return window.frameElement?
self.location :
document.getElementById('contenu')?
document.getElementById('contenu').src :
null;
}

--
sm



Merci pour votre aide.
- src renvoie l'url initiale sans le supplément lié à la session.
- location lance une exception alors que le debugger montre bien la bonne valeur (???)

Pour être plus précis sur le problème, j'ai un frameset avec une frame comportant une série de liens servant de menus et une frame
pour afficher le contenu.
C'est pour ca que j'utilise this.frameElement.ownerDocument.getElementById("contenu") pour accéder à ma frame de contenu depuis la
frame de liens.

Depuis la frame de liens, je peux lancer n applications à afficher dans la frame de contenu.
Je veux garder en mémoire la dernière url dynamique pour ne pas perdre la session si l'utilisateur passe d'une appli à une autre.
J'initialise avec les urls de base des différentes applications puis j'aimerais gérer un arrray avec les derniers url dynamique pour
chaque application.



Merci si vous avez d'autres idées ....

Pierre
Avatar
SAM
Le 5/23/09 9:49 AM, 1 connu a écrit :
"SAM" a écrit dans le message de news: 4a172216$0$17767$
Le 5/22/09 11:23 PM, SAM a écrit :
function urlIframe() {
return = window.frameElement?


heu ... y a pas d'égale, normalement ! :-(

function urlIframe() {
return window.frameElement?
self.location :
document.getElementById('contenu')?
document.getElementById('contenu').src :
null;
}



Merci pour votre aide.
- src renvoie l'url initiale sans le supplément lié à la session.



Qu'est ce supplément ?
Comment est-il passé ? (dans l'url)

- location lance une exception alors que le debugger montre bien la bonne valeur (???)

Pour être plus précis sur le problème, j'ai un frameset avec une frame comportant une série de liens servant de menus et une frame
pour afficher le contenu.



Bon, donc on est dans une bête page de cadres.
Le fichier père a bien le bon doc-type frameset (important!).
Ses frames ont des noms : 'menu' et 'contenu' (par exemple)
Le cadre 'menu' a pour "target" celui 'contenu'.

L'url d'une des frames
devrait (normalement !?) s'obtenir par un simple :

urlMenu = parent.contenu.location;
ou :
urlMenu = parent.contenu.location.href;


C'est pour ca que j'utilise this.frameElement.ownerDocument.getElementById("contenu") pour accéder à ma frame de contenu depuis la
frame de liens.



Ça c'est du truc bien compliqué à la DomMachin et + particulièrement
adapté pour les iframes alors que le JS a d'autres ficèles qui
existaient au siècle dernier.
<http://stephane.moriaux.pagesperso-orange.fr/truc/resize_frames/>
bien qu'en quirks, me renvoie bien le ?blablabla de l'url.

Depuis la frame de liens, je peux lancer n applications à afficher dans la frame de contenu.
Je veux garder en mémoire la dernière url dynamique pour ne pas perdre la session si l'utilisateur passe d'une appli à une autre.



J'a rhen compris là ...
Dans le fichier affiché dans le cadre 'menu' toutes ses lien-boutons ont
chacun l'url du fichier-application à charger.
Serait-ce à dire que suivant l'appli lancée dans 'contenu' les boutons
de 'menu' changent ? (dynamiquement ... (côté serveur ?)), c a d qu'un
autre fichier est chargé à gauche ?
Alors, si j'en crois mon exemple ci-haut, il ne reste que :
document.gEBI(truc).src
qui fonctionne.

J'initialise avec les urls de base des différentes applications puis j'aimerais gérer un arrray avec les derniers url dynamique pour
chaque application.



Ha !? alors ...
- je lance une "appli" dans le cadre 'contenu'
- suivant ce que je bricole dans l'appli
elle va faire afficher autre chose dans ce même cadre
C'est ça ?

Alors le JS est dans le fichier père (le frameset), et c'est lui qui
aura l'array des manips.
Idéalement pour changer qque chose dans 'contenu' et à partir d'y-celui
je me servirais d'une fonction du parent (du fichier de frameset)

--
sm
Avatar
1 connu
Merci Sam pour ta patience.
Je vais essayer d'être précis et complet cette fois ci.

J'ai 2 framesets imbriqués :
<frameset rows="60,*" cols="*" frameborder="NO" border="0" framespacing="0">
<frame name="menu" src="BarBouton.html" scrolling="NO" noresize >
<frameset cols="169,*" frameborder="NO" border="0" framespacing="0">
.....
<frame name="contenu" src="Accueil.html"> // le frame de contenu initialisé avec un accueil
....
</frameset>
</frameset>

Dans le menu (BarBouton.html), j'ai une serie de liens :

<ul>
<li class="selected"><a href="Accueil.html" target="contenu" onClick="changeClass(this)" title="Home"><span>Accueil</span></a></li>
<li class=""><a href="http://monDomain/WebObjects/MonAppli1.woa" onClick="changeClass(this)" target="contenu"><span>Appli
1</span></a></li>
<li class=""><a href="http://monDomain/WebObjects/MonAppli2.woa" onClick="changeClass(this)" target="contenu"><span>Appli
2</span></a></li>
...
et le javascript qui permet de changer le look des boutons .

Dans l'état, si l'utilisateur passe de l'appli 1 à la 2, la session de l'appli 1 est perdue. A son retour sur l'appli 1, il est
ramené au login.
J'aimerais qu'il puisserevenir à l'état où il était dans l'appli1.
Je précise que les appli sont servis par le serveur d'application WebObjects en Java.
L'url de base "http://monDomain/WebObjects/MonAppli1.woa" se transforme en fonction de l'utilisation en qq chose comme
http://monDomain/WebObjects/MonAppli1.woa/1/wo/6HDoDbBE5F8tv19UGsFVww/2.1 (contient l'identifiant de la session + valeurs générées
dynamiquement).
C'est donc la dernière valeur de l'url que je veux conserver pour pouvoir la substituer à l'url de base en cas de retour sur l'appli
1.

J'ai donc essayé qq chose comme cela dans la frame 'menu' :

var contents = ["http://monDomain/WebObjects/MonAppli1.woa", http://monDomain/WebObjects/MonAppli2.woa]; //init avec les urls de
bases
var indexContent = 0;

function changeContent(noAppli) {
var frContenu = this.frameElement.ownerDocument.getElementById("contenu"); // me renvoie la frame du contenu
contents[indexContent] = frContenu.contentDocument.location.href; // j'ai essayé de recuperer ici l'url dynamique mais sans
succés
indexContent = noAppli;
frContenu.src = contents[noAppli]; // j'envoie le dernier url dynamique dans la frame contenu
}

<li class=""><a href="http://monDomain/WebObjects/MonAppli1.woa" onClick="changeContent(0)" target="contenu"><span>Appli
1</span></a></li>
<li class=""><a href="http://monDomain/WebObjects/MonAppli2.woa" onClick="changeContent(1)" target="contenu"><span>Appli
2</span></a></li>

Malheureusement, je n'arrive jamais à récupérer l'url dynamique (exception "Permission refusée ..."). Pourtant je la vois dans le
debugger de firefox.
En plus, je ne sais pas si cela sera utilisable dans d'autres navigateurs ....

Merci d'avance pour toute autre idée pour arriver à ce but.

Pierre


"SAM" a écrit dans le message de news: 4a19704d$0$12624$
Le 5/23/09 9:49 AM, 1 connu a écrit :
"SAM" a écrit dans le message de news: 4a172216$0$17767$
Le 5/22/09 11:23 PM, SAM a écrit :
function urlIframe() {
return = window.frameElement?


heu ... y a pas d'égale, normalement ! :-(

function urlIframe() {
return window.frameElement?
self.location :
document.getElementById('contenu')?
document.getElementById('contenu').src :
null;
}



Merci pour votre aide.
- src renvoie l'url initiale sans le supplément lié à la session.



Qu'est ce supplément ?
Comment est-il passé ? (dans l'url)

- location lance une exception alors que le debugger montre bien la bonne valeur (???)

Pour être plus précis sur le problème, j'ai un frameset avec une frame comportant une série de liens servant de menus et une
frame pour afficher le contenu.



Bon, donc on est dans une bête page de cadres.
Le fichier père a bien le bon doc-type frameset (important!).
Ses frames ont des noms : 'menu' et 'contenu' (par exemple)
Le cadre 'menu' a pour "target" celui 'contenu'.

L'url d'une des frames
devrait (normalement !?) s'obtenir par un simple :

urlMenu = parent.contenu.location;
ou :
urlMenu = parent.contenu.location.href;


C'est pour ca que j'utilise this.frameElement.ownerDocument.getElementById("contenu") pour accéder à ma frame de contenu depuis
la frame de liens.



Ça c'est du truc bien compliqué à la DomMachin et + particulièrement
adapté pour les iframes alors que le JS a d'autres ficèles qui
existaient au siècle dernier.
<http://stephane.moriaux.pagesperso-orange.fr/truc/resize_frames/>
bien qu'en quirks, me renvoie bien le ?blablabla de l'url.

Depuis la frame de liens, je peux lancer n applications à afficher dans la frame de contenu.
Je veux garder en mémoire la dernière url dynamique pour ne pas perdre la session si l'utilisateur passe d'une appli à une autre.



J'a rhen compris là ...
Dans le fichier affiché dans le cadre 'menu' toutes ses lien-boutons ont
chacun l'url du fichier-application à charger.
Serait-ce à dire que suivant l'appli lancée dans 'contenu' les boutons
de 'menu' changent ? (dynamiquement ... (côté serveur ?)), c a d qu'un autre fichier est chargé à gauche ?
Alors, si j'en crois mon exemple ci-haut, il ne reste que :
document.gEBI(truc).src
qui fonctionne.

J'initialise avec les urls de base des différentes applications puis j'aimerais gérer un arrray avec les derniers url dynamique
pour chaque application.



Ha !? alors ...
- je lance une "appli" dans le cadre 'contenu'
- suivant ce que je bricole dans l'appli
elle va faire afficher autre chose dans ce même cadre
C'est ça ?

Alors le JS est dans le fichier père (le frameset), et c'est lui qui
aura l'array des manips.
Idéalement pour changer qque chose dans 'contenu' et à partir d'y-celui
je me servirais d'une fonction du parent (du fichier de frameset)

--
sm


Avatar
1 connu
J'ai pu avancer grâce à ton lien. Je peux accéder à l'url dynamique de la frame contenu par :

var frameUrlContenu = parent.parent.contenu.location; // 2 fois parent car 2 framesets imbriqués

La fonction JS dans la frame 'menu' devient :

var contents = new Array("Accueil.html", "http://monDomain/WebObjects/MonAppli1.woa", "http://monDomain/WebObjects/MonAppli2.woa");
var indexContent = 0;
function changeContent(noAppli) {
var frameContenu = parent.parent.contenu;
var frameUrlContenu = parent.parent.contenu.location;
contents[indexContent] = frameUrlContenu; // met l'url dynamique de l'appli qu'on quitte
indexContent = noAppli;
frameContenu.src = contents[indexContent]; // lance la nouvelle appli dans la frame 'contenu'
}

mais ma compréhension de js étant très limité, l'array contents n'est jamais cohérents et semble varier en dehors de mon code JS.

La dernière instruction frameContenu.src ou frameUrlContenu .src = ne marche pas non plus.
J'ai essayé de la remplacer par l'utilisation directe de l'array dans l'html sans succès non plus :

<a href=contents[1] onClick="changeContent(1)" target="contenu"><span>Appli 1</span></a>

.....

"1 connu" a écrit dans le message de news: 18089$4a1a44a6$55da5a05$
Merci Sam pour ta patience.
Je vais essayer d'être précis et complet cette fois ci.

J'ai 2 framesets imbriqués :
<frameset rows="60,*" cols="*" frameborder="NO" border="0" framespacing="0">
<frame name="menu" src="BarBouton.html" scrolling="NO" noresize >
<frameset cols="169,*" frameborder="NO" border="0" framespacing="0">
.....
<frame name="contenu" src="Accueil.html"> // le frame de contenu initialisé avec un accueil
....
</frameset>
</frameset>

Dans le menu (BarBouton.html), j'ai une serie de liens :

<ul>
<li class="selected"><a href="Accueil.html" target="contenu" onClick="changeClass(this)"
title="Home"><span>Accueil</span></a></li>
<li class=""><a href="http://monDomain/WebObjects/MonAppli1.woa" onClick="changeClass(this)" target="contenu"><span>Appli
1</span></a></li>
<li class=""><a href="http://monDomain/WebObjects/MonAppli2.woa" onClick="changeClass(this)" target="contenu"><span>Appli
2</span></a></li>
...
et le javascript qui permet de changer le look des boutons .

Dans l'état, si l'utilisateur passe de l'appli 1 à la 2, la session de l'appli 1 est perdue. A son retour sur l'appli 1, il est
ramené au login.
J'aimerais qu'il puisserevenir à l'état où il était dans l'appli1.
Je précise que les appli sont servis par le serveur d'application WebObjects en Java.
L'url de base "http://monDomain/WebObjects/MonAppli1.woa" se transforme en fonction de l'utilisation en qq chose comme
http://monDomain/WebObjects/MonAppli1.woa/1/wo/6HDoDbBE5F8tv19UGsFVww/2.1 (contient l'identifiant de la session + valeurs générées
dynamiquement).
C'est donc la dernière valeur de l'url que je veux conserver pour pouvoir la substituer à l'url de base en cas de retour sur
l'appli 1.

J'ai donc essayé qq chose comme cela dans la frame 'menu' :

var contents = ["http://monDomain/WebObjects/MonAppli1.woa", http://monDomain/WebObjects/MonAppli2.woa]; //init avec les urls de
bases
var indexContent = 0;

function changeContent(noAppli) {
var frContenu = this.frameElement.ownerDocument.getElementById("contenu"); // me renvoie la frame du contenu
contents[indexContent] = frContenu.contentDocument.location.href; // j'ai essayé de recuperer ici l'url dynamique mais sans
succés
indexContent = noAppli;
frContenu.src = contents[noAppli]; // j'envoie le dernier url dynamique dans la frame contenu
}

<li class=""><a href="http://monDomain/WebObjects/MonAppli1.woa" onClick="changeContent(0)" target="contenu"><span>Appli
1</span></a></li>
<li class=""><a href="http://monDomain/WebObjects/MonAppli2.woa" onClick="changeContent(1)" target="contenu"><span>Appli
2</span></a></li>

Malheureusement, je n'arrive jamais à récupérer l'url dynamique (exception "Permission refusée ..."). Pourtant je la vois dans
le debugger de firefox.
En plus, je ne sais pas si cela sera utilisable dans d'autres navigateurs ....

Merci d'avance pour toute autre idée pour arriver à ce but.

Pierre


"SAM" a écrit dans le message de news: 4a19704d$0$12624$
Le 5/23/09 9:49 AM, 1 connu a écrit :
"SAM" a écrit dans le message de news: 4a172216$0$17767$
Le 5/22/09 11:23 PM, SAM a écrit :
function urlIframe() {
return = window.frameElement?


heu ... y a pas d'égale, normalement ! :-(

function urlIframe() {
return window.frameElement?
self.location :
document.getElementById('contenu')?
document.getElementById('contenu').src :
null;
}



Merci pour votre aide.
- src renvoie l'url initiale sans le supplément lié à la session.



Qu'est ce supplément ?
Comment est-il passé ? (dans l'url)

- location lance une exception alors que le debugger montre bien la bonne valeur (???)

Pour être plus précis sur le problème, j'ai un frameset avec une frame comportant une série de liens servant de menus et une
frame pour afficher le contenu.



Bon, donc on est dans une bête page de cadres.
Le fichier père a bien le bon doc-type frameset (important!).
Ses frames ont des noms : 'menu' et 'contenu' (par exemple)
Le cadre 'menu' a pour "target" celui 'contenu'.

L'url d'une des frames
devrait (normalement !?) s'obtenir par un simple :

urlMenu = parent.contenu.location;
ou :
urlMenu = parent.contenu.location.href;


C'est pour ca que j'utilise this.frameElement.ownerDocument.getElementById("contenu") pour accéder à ma frame de contenu depuis
la frame de liens.



Ça c'est du truc bien compliqué à la DomMachin et + particulièrement
adapté pour les iframes alors que le JS a d'autres ficèles qui
existaient au siècle dernier.
<http://stephane.moriaux.pagesperso-orange.fr/truc/resize_frames/>
bien qu'en quirks, me renvoie bien le ?blablabla de l'url.

Depuis la frame de liens, je peux lancer n applications à afficher dans la frame de contenu.
Je veux garder en mémoire la dernière url dynamique pour ne pas perdre la session si l'utilisateur passe d'une appli à une
autre.



J'a rhen compris là ...
Dans le fichier affiché dans le cadre 'menu' toutes ses lien-boutons ont
chacun l'url du fichier-application à charger.
Serait-ce à dire que suivant l'appli lancée dans 'contenu' les boutons
de 'menu' changent ? (dynamiquement ... (côté serveur ?)), c a d qu'un autre fichier est chargé à gauche ?
Alors, si j'en crois mon exemple ci-haut, il ne reste que :
document.gEBI(truc).src
qui fonctionne.

J'initialise avec les urls de base des différentes applications puis j'aimerais gérer un arrray avec les derniers url dynamique
pour chaque application.



Ha !? alors ...
- je lance une "appli" dans le cadre 'contenu'
- suivant ce que je bricole dans l'appli
elle va faire afficher autre chose dans ce même cadre
C'est ça ?

Alors le JS est dans le fichier père (le frameset), et c'est lui qui
aura l'array des manips.
Idéalement pour changer qque chose dans 'contenu' et à partir d'y-celui
je me servirais d'une fonction du parent (du fichier de frameset)

--
sm






Avatar
SAM
Le 5/25/09 11:37 AM, 1 connu a écrit :
J'ai pu avancer grâce à ton lien. Je peux accéder à l'url dynamique de la frame contenu par :

var frameUrlContenu = parent.parent.contenu.location; // 2 fois parent car 2 framesets imbriqués



Il suffit de s'adresser à la fenêtre principale, la première : 'top'

function changeContent(noAppli) {
var frameContenu = top.contenu;

La fonction JS dans la frame 'menu' devient :

var contents = new Array("Accueil.html", "http://monDomain/WebObjects/MonAppli1.woa", "http://monDomain/WebObjects/MonAppli2.woa");



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

var indexContent = 0;
function changeContent(noAppli) {
var frameContenu = parent.parent.contenu;
var frameUrlContenu = parent.parent.contenu.location;
contents[indexContent] = frameUrlContenu; // met l'url dynamique de l'appli qu'on quitte
indexContent = noAppli;
frameContenu.src = contents[indexContent]; // lance la nouvelle appli dans la frame 'contenu'
}

mais ma compréhension de js étant très limité, l'array contents n'est jamais cohérents et semble varier en dehors de mon code JS.

La dernière instruction frameContenu.src ou frameUrlContenu .src = ne marche pas non plus.



Sans doute parce qu'il faut employer 'location' au lieu de 'src' ?

On a vu, grâce à mon lien, que, lorsque le src de la frame est modifié,
la récup de l'url ne fonctionne alors plus qu'en DOM ...

var frameUrlContenu = null;
frameUrlContenu = top.contenu.location ? top.contenu.location :
// si des fois que 'top.contenu.location' fonctionne
// tant mieux
// sinon on tente le getElementByName
top.document.getElementByName &&
top.document.getElementByName('contenu') &&
top.document.getElementByName('contenu').src ?
top.document.getElementByName('contenu').src :
// et si ce n'est pas OK non plus
// on tente le getElementsByTagName
(
var f = top.document.getElementsByTagName('FRAME');
if (f && f.length>0)
for(var i=0, n=f.length); i<n; i++)
if(f[i].name == 'contenu') return f[i].src;
);
// ça aurait été + simple si la frame avait eu un 'ID'
// on aurait tenté direct
// top.document.getElementById('contenu').src
if(frameUrlContenu) content[indexContent] = frameUrlContenu;
else alert('grosse erreur !');

J'ai essayé de la remplacer par l'utilisation directe de l'array dans l'html sans succès non plus :

<a href=contents[1] onClick="changeContent(1)" target="contenu"><span>Appli 1</span></a>



<a href="#" onClick="changeContent(1); return false;">Appli 1</a>

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

et ce serait mieux :

<a href="#" onClick="return changeContent(1);">Appli 1</a>

avec :

function changeContent(noAppli) {
var frameUrlContenu = null;
frameUrlContenu = top.contenu.location ? top.contenu.location :
top.document.getElementByName &&
top.document.getElementByName('contenu') &&
top.document.getElementByName('contenu').src ?
top.document.getElementByName('contenu').src :
(
var f = top.document.getElementsByTagName('FRAME');
if (f && f.length>0)
for(var i=0, n=f.length); i<n; i++)
if(f[i].name == 'contenu') return f[i].src;
);
if(frameUrlContenu) content[indexContent] = frameUrlContenu;
else {
alert('grosse erreur !');
return false;
}
contents[indexContent] = frameUrlContenu;
indexContent = noAppli;
top.contenu.location = contents[indexContent];
return false;
}


--
sm
Avatar
1 connu
"SAM" a écrit dans le message de news: 4a1a85b8$0$17062$
Le 5/25/09 11:37 AM, 1 connu a écrit :
J'ai pu avancer grâce à ton lien. Je peux accéder à l'url dynamique de la frame contenu par :

var frameUrlContenu = parent.parent.contenu.location; // 2 fois parent car 2 framesets imbriqués



Il suffit de s'adresser à la fenêtre principale, la première : 'top'

function changeContent(noAppli) {
var frameContenu = top.contenu;

La fonction JS dans la frame 'menu' devient :

var contents = new Array("Accueil.html", "http://monDomain/WebObjects/MonAppli1.woa",
"http://monDomain/WebObjects/MonAppli2.woa");



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

var indexContent = 0;
function changeContent(noAppli) {
var frameContenu = parent.parent.contenu;
var frameUrlContenu = parent.parent.contenu.location;
contents[indexContent] = frameUrlContenu; // met l'url dynamique de l'appli qu'on quitte
indexContent = noAppli;
frameContenu.src = contents[indexContent]; // lance la nouvelle appli dans la frame 'contenu'
}

mais ma compréhension de js étant très limité, l'array contents n'est jamais cohérents et semble varier en dehors de mon code
JS.

La dernière instruction frameContenu.src ou frameUrlContenu .src = ne marche pas non plus.



Sans doute parce qu'il faut employer 'location' au lieu de 'src' ?

On a vu, grâce à mon lien, que, lorsque le src de la frame est modifié, la récup de l'url ne fonctionne alors plus qu'en DOM ...

var frameUrlContenu = null;
frameUrlContenu = top.contenu.location ? top.contenu.location :
// si des fois que 'top.contenu.location' fonctionne
// tant mieux
// sinon on tente le getElementByName
top.document.getElementByName &&
top.document.getElementByName('contenu') &&
top.document.getElementByName('contenu').src ?
top.document.getElementByName('contenu').src :
// et si ce n'est pas OK non plus
// on tente le getElementsByTagName
(
var f = top.document.getElementsByTagName('FRAME');
if (f && f.length>0)
for(var i=0, n=f.length); i<n; i++)
if(f[i].name == 'contenu') return f[i].src;
);
// ça aurait été + simple si la frame avait eu un 'ID'
// on aurait tenté direct
// top.document.getElementById('contenu').src
if(frameUrlContenu) content[indexContent] = frameUrlContenu;



Je pense avoir un problème ici . l'array contents change tout seul. 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 ?
il faut que contents et indexContent soient global. Donc il ne faut pas de var, juste ?


else alert('grosse erreur !');

J'ai essayé de la remplacer par l'utilisation directe de l'array dans l'html sans succès non plus :

<a href=contents[1] onClick="changeContent(1)" target="contenu"><span>Appli 1</span></a>



<a href="#" onClick="changeContent(1); return false;">Appli 1</a>



J'ai fait ces modifs

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

et ce serait mieux :

<a href="#" onClick="return changeContent(1);">Appli 1</a>

avec :

function changeContent(noAppli) {
var frameUrlContenu = null;
frameUrlContenu = top.contenu.location ? top.contenu.location :
top.document.getElementByName &&
top.document.getElementByName('contenu') &&
top.document.getElementByName('contenu').src ?
top.document.getElementByName('contenu').src :
(
var f = top.document.getElementsByTagName('FRAME');
if (f && f.length>0)
for(var i=0, n=f.length); i<n; i++)
if(f[i].name == 'contenu') return f[i].src;
);
if(frameUrlContenu) content[indexContent] = frameUrlContenu;
else {
alert('grosse erreur !');
return false;
}
contents[indexContent] = frameUrlContenu;
indexContent = noAppli;
top.contenu.location = contents[indexContent];



Cela n'affiche pas ce qui est dans l'array contents !
J'ai des situations ou contents contient n fois la même url dynamique (suite au problème plus haut) mais l'affichage dans le contenu
est le barre de menu !!!
J'y perd mon latin ...

Merci encore pour ton aide.

return false;
}


--
sm


Avatar
1 connu
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

Merci pour ton aide.
1 2