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

Firefox, Onfocus et XMLHttpRequest

7 réponses
Avatar
Sam Lion
Bonjour,

J'ai voulu m'essayer à XMLHttpRequest avec un problème simple : sur une page
web, l'utilisateur de mon site peut faire une sélection d'articles de presse
(dans l'esprit d'un caddie). Sur cette page, sa sélection apparait en bas de
l'écran dans un bloc "div" (nommé 'espace'). Quand sur cette page il clique
sur un l'article, cela ouvre une fenêtre pop-up dans laquelle il peut
classer cet article dans des dossiers.

Quand il ferme la pop-up, j'ai un "Onfocus=recherche()" sur la page web, qui
rafraichit le bloc div (voir a quoi correspond recherche() ci dessous)
Le rafraichissement fonctionne parfaitement sur ie et sur firefox.
Par contre, une fois qu'un rafraichissement a eu lieu, les liens hypertextes
présents dans le bloc div et permettant d'ouvrir une sélection dans une
pop-up ne fonctionnent plus sous firefox.

J'ai essayé différentes syntaxes pour le lien hypertexte : appel d'une
fonction qui ouvre la pop-up, un javascript:window.open(xxx,xxx,xxx); ou
même un simple lien vers un autre site etc. mais rien n'y fait : après un
rafraichissement du bloc div les liens hypertextes ne fonctionnent plus sous
firefox.
Pensez-vous que cela vient d'une erreur dans le code ci-dessous ? (trouvé
sur la toile...)

Merci d'avance...
----------
function writediv(texte)

{

document.getElementById('espace').innerHTML = texte;

}

function recherche(recherche)

{

texte = file('inc_espace.php')

writediv(texte);

}

function file(fichier)

{

if(window.XMLHttpRequest) // FIREFOX

xhr_object = new XMLHttpRequest();

else if(window.ActiveXObject) // IE

xhr_object = new ActiveXObject("Microsoft.XMLHTTP");

else

return(false);

xhr_object.open("GET", fichier, false);

xhr_object.send(null);

if(xhr_object.readyState == 4) return(xhr_object.responseText);

else return(false);

}

7 réponses

Avatar
Guy
Bonjour,

J'ai voulu m'essayer à XMLHttpRequest avec un problème simple : sur une page
web, l'utilisateur de mon site peut faire une sélection d'articles de presse
(dans l'esprit d'un caddie). Sur cette page, sa sélection apparait en bas de
l'écran dans un bloc "div" (nommé 'espace'). Quand sur cette page il clique
sur un l'article, cela ouvre une fenêtre pop-up dans laquelle il peut
classer cet article dans des dossiers.

Quand il ferme la pop-up, j'ai un "Onfocus=recherche()" sur la page web, qui
rafraichit le bloc div (voir a quoi correspond recherche() ci dessous)
Le rafraichissement fonctionne parfaitement sur ie et sur firefox.
Par contre, une fois qu'un rafraichissement a eu lieu, les liens hypertextes
présents dans le bloc div et permettant d'ouvrir une sélection dans une
pop-up ne fonctionnent plus sous firefox.

J'ai essayé différentes syntaxes pour le lien hypertexte : appel d'une
fonction qui ouvre la pop-up, un javascript:window.open(xxx,xxx,xxx); ou
même un simple lien vers un autre site etc. mais rien n'y fait : après un
rafraichissement du bloc div les liens hypertextes ne fonctionnent plus sous
firefox.
Pensez-vous que cela vient d'une erreur dans le code ci-dessous ? (trouvé
sur la toile...)

Merci d'avance...
----------
function writediv(texte)

{

document.getElementById('espace').innerHTML = texte;

}



premièrement : la fonction recherche n'a pas besoin de paramètre !!!
deuxio : que produit inc_espace.php ? il donne certainement un page HTML
avec les balises <head> <html> <body> etc..
dans ce cas si vous ne pouvez changer inc-espace.php par un fichier
texte, il faudra certainement le visualiser dans une FRAME
G

function recherche(recherche)

{

texte = file('inc_espace.php')

writediv(texte);

}

function file(fichier)

{

if(window.XMLHttpRequest) // FIREFOX

xhr_object = new XMLHttpRequest();

else if(window.ActiveXObject) // IE

xhr_object = new ActiveXObject("Microsoft.XMLHTTP");

else

return(false);

xhr_object.open("GET", fichier, false);

xhr_object.send(null);

if(xhr_object.readyState == 4) return(xhr_object.responseText);

else return(false);

}





Avatar
Sam Lion
Bonjour et merci pour la réponse...

premièrement : la fonction recherche n'a pas besoin de paramètre !!!


Effectivement je corrige :-)

deuxio : que produit inc_espace.php ? il donne certainement un page HTML
avec les balises <head> <html> <body> etc..
dans ce cas si vous ne pouvez changer inc-espace.php par un fichier texte,
il faudra certainement le visualiser dans une FRAME


Non inc_espace renvoie juste l'intérieur d'une colonne de tableau (<td><div
id='espace'></div></td>). Dans cette colonne, des liens hypertextes les uns
sous les autres vers les différentes sélections créées par l'utilisateur.
Si je fais la même chose dans une frame j'ai plus de chance que firefox
réagisse correctement ?

Avatar
Guy
Bonjour et merci pour la réponse...


premièrement : la fonction recherche n'a pas besoin de paramètre !!!



Effectivement je corrige :-)


deuxio : que produit inc_espace.php ? il donne certainement un page HTML
avec les balises <head> <html> <body> etc..
dans ce cas si vous ne pouvez changer inc-espace.php par un fichier texte,
il faudra certainement le visualiser dans une FRAME



Non inc_espace renvoie juste l'intérieur d'une colonne de tableau (<td><div
id='espace'></div></td>). Dans cette colonne, des liens hypertextes les uns
sous les autres vers les différentes sélections créées par l'utilisateur.
Si je fais la même chose dans une frame j'ai plus de chance que firefox
réagisse correctement ?


êtes-vous sûr que inc_espace.php renvoie uniquement les colonnes d'un

tableau ? php renvoie automatiquement des balises de pages HTML !
pour vérifier faites appel manuellment à inc_espace.php et visualiser le
résultat.
bonne chance
G


Avatar
Sam Lion
êtes-vous sûr que inc_espace.php renvoie uniquement les colonnes d'un
tableau ? php renvoie automatiquement des balises de pages HTML !
pour vérifier faites appel manuellment à inc_espace.php et visualiser le
résultat.
bonne chance
G


Bah je pense que oui, inc_espace me renvoie juste des echo du code html à
placer dans le bloc div
Ci-dessous le code renvoyé entre les td.
Yves
-----------------
<td>
<div id='espace'>
<table width='205' border='0' align='center'
cellpadding='0' cellspacing='0' bgcolor='#FFFFFF'>
<tr>
<td valign='top'>
<table width='200' border='0'
align='center' cellpadding='0' cellspacing='0'>
<tr>
<td class='verdanagras'>
3 dossier(s)
</td>
</tr>
<tr>
<td class='arialgris'
bgcolor='#E6EEF1'><A href='javascript:void(0);' class='lienrouge'
onClick="MM_openBrWindow('selection.php?dossier=0','','scrollbars=yes,widthe0,heightf0')"><img
src='img/dossier.gif' width='16' height='9' align='absmiddle'
border='0'></a>
<strong>anne</strong> | 1
article(s)</td>
</tr>
<tr>
<td class='arialgris'
bgcolor='#FFFFFF'><A href='javascript:void(0);' class='lienrouge'
onClick="MM_openBrWindow('selection.php?dossier=1','','scrollbars=yes,widthe0,heightf0')"><img
src='img/dossier.gif' width='16' height='9' align='absmiddle'
border='0'></a>
<strong>associations</strong> |
2 article(s)</td>
</tr>
<tr>
<td class='arialgris'
bgcolor='#E6EEF1'><A href='javascript:void(0);' class='lienrouge'
onClick="MM_openBrWindow('selection.php?dossier=2','','scrollbars=yes,widthe0,heightf0')"><img
src='img/dossier.gif' width='16' height='9' align='absmiddle'
border='0'></a>
<strong>associations
fiscalité</strong> | 11 article(s)</td>
</tr>
<tr>
<td>&nbsp;
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</td>

Avatar
ASM

Ci-dessous le code renvoyé entre les td.
Yves
-----------------
<td>


est-ce que ce code revoyé par le php n'est pas un peu erroné ?
- ce <td> est-il bien nécessaire ? (n'existe-il pas déjà ?)
- de même que le div 'espace' ?

<div id='espace'>


on va donc estimer que le php requesté commence ici :

<table width='205' border='0' align='center'
cellpadding='0' cellspacing='0' bgcolor='#FFFFFF'>
<tr>
<td valign='top'>
<table width='200' border='0'
align='center' cellpadding='0' cellspacing='0'>
<tr>
<td class='verdanagras'>
3 dossier(s)
</td>
</tr>
<tr>
<td class='arialgris'
bgcolor='#E6EEF1'><A href='javascript:void(0);' class='lienrouge'
onClick="MM_openBrWindow('selection.php?dossier=0','','scrollbars=yes,widthe0,heightf0')"><img
src='img/dossier.gif' width='16' height='9' align='absmiddle'
border='0'></a>


Pour le lien j'ussions préféré :

<A href="selection.php?dossier=0" class="lienrouge"
onClick="return
MM_openBrWindow(this.href,'','scrollbars=yes,widthe0,heightf0');"
<img src='img/dossier.gif' width='16' height='9' align='absmiddle'
border='0'></a>


restant à savoir ce que fabrique la MacroMerde fonction :
MM_openBrWindow(blabla)
qui devra renvoyer false en fin d'exe


<strong>anne</strong> | 1
article(s)</td>
</tr>
[...]


Le curieux est que chez moi (et un peu modifié) ça fonctionne correctement :
http://perso.orange.fr/stephane.moriaux/truc/get_liens.htm
le fichier requesté n'est pas un php "intelligent"
http://perso.orange.fr/stephane.moriaux/truc/set_liens.txt

--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

Avatar
Sam Lion
<div id='espace'>> on va donc estimer que le php
requesté commence ici :
<table width='205' border='0' align='center'



Oui oui il commence bien à cet endroit j'avais mis le tout pour que l'on
voit bien que tout est envoyé dans le td

MERCI !! MERCI !! MERRRRRRRRRRRRRRRRRRRRRRRRCI !
Cela fonctionne !
Merci d'avoir passé du temps sur ma question c'est très sympa.
Je n'ai pas compris pourquoi cela marche (je chercherai demain), mais
simplement en remplaçant les anciennes fonctions (recherche et file) par les
votres cela marche sans problème sous firefox...
Merci encore
Yves


Avatar
ASM

MERCI !! MERCI !! MERRRRRRRRRRRRRRRRRRRRRRRRCI !
Cela fonctionne !
simplement en remplaçant les anciennes fonctions (recherche et file) par les
votres cela marche sans problème sous firefox...


C'est donc certainement la fonction recherche(recherche)
(dont attribut est le même que la fonction et peut confusionner le JS)
remplacée par recherche(recherch)
qui doit jouer, vu que file() est quasi inchangée.

De même je joue un peu la sécurité avec :
<a href="set_liens.txt" onclick="return recherche(this);">
où le href est renseigné clairement (au cas où le JS capote)
et où le onclick force le recherche() par le return
(pour lancer l'appel du lien on attend le résultat de recherche() )



--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé