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

Faire qu'Opéra n'interprète pas un script

3 réponses
Avatar
MIMATA
Bonjour,

J'ai un problème avec un script sur mon site. C'est un loading pendant
le cargement d'une page. Le problème, c'est qu'il plante sous Opéra, IE
AMC et Safari.
Est-il possible d'ajouter une fonction au début du script pour détecter
ces navigateurs et faire en sorte qu'ils ignorent le script ?

Le code se compose de 2 scripts :

Dans le head :

<!--
var ie = document.all?true:false // On test le navigateur pour IE

onload = preloadImage // Appel de la function preloadImage() au
chargement de la page. Peut etre remplacer par <body
onload="preloadImage()">

function addZero(chiffre){ // Function qui ajoute un zero devant les
chiffres
if (chiffre < 10) { chiffre = "0"+chiffre; }
if (chiffre < 100) { chiffre = "0"+chiffre; }
return chiffre;
}

var i=0; // On initialise le comptage des images a 0.
function preloadImage(){
var myContent = document.getElementsByTagName("img") // On repere les
images contenu dans la page
var totalImage = myContent.length // Et on compte combien il y'en a
percent = Math.ceil((i+1)*100/totalImage) // A chaque passage dans la
fonction, on calcule le pourcentage de i par rapport au nb d'image

if (i < totalImage){ // Si l'image traité n'est pas la derniere image
du doc on execute ce qui suit.
if (myContent.item(i).complete) { // si l'image i est chargée, on
envoi le pourcentage dans le div
document.getElementById("preloadPercent").innerHTML = "[Veuillez
patienter " + addZero(percent) + "%]";
document.loadedGreen.style.width = percent // Et on redimension
l'image rouge
document.loadedRed.style.width = 100-percent // pareil en consequence
avec la verte.
i++ // On increment i, pour passer a l'image suivante
setTimeout(preloadImage) // Et hop, on repasse dans la fonction avec
l'image suivante
}
} else { // Sinon, on deduit que les images ont toute été chargées, et
on cache le preload.
if (!ie) document.getElementById("preloadCache").style.visibility =
"hidden"; // Si le client n'est pas IE on vire tout simplement le cache
else crosoftFade() // Sinon on applique un effet de fade progressif en
appelant la fonction crosoftFade()
}
}

var opacity = 60 // Opacity de depart 100 par defaut
function crosoftFade(){
opacity -= 10; // Opacity a chaque passage -25 par defaut
document.getElementById("preloadCache").style.filter =
"progid:DXImageTransform.Microsoft.Alpha(opacity=" + opacity + ")";
if (opacity > 0) setTimeout(crosoftFade); // On passe cette fonction en
boucle tant que le cache n'a pas disparu
else document.getElementById("preloadCache").style.visibility =
"hidden";
}
// -->

Dans le body :

<!--
var str='';
str+=' <table id=\"preloadCache\" style=\"z-index: 123; position:
absolute; top: 0px; left: 0px; width: 100%; height: 100%\"
cellspacing=\"0\" cellpadding=\"0\" border=\"0\">'
str+=' <tr>'
str+=' <td align=\"middle\" style=\"background:
url(images/bgmenu.gif)\">'
str+=' <div id=\"preloadPercent\">'
str+=' <p class=\"center\">Veuillez patienter 000%</p></div>'
str+=' <table cellspacing=\"0\" cellpadding=\"1\" width=\"100\"
border=\"0\">'
str+=' <tr bgcolor=\"#999999\">'
str+=' <td>'
str+=' <img height=\"15\" src=\"images/m1.gif\" width=\"0\"
name=\"loadedGreen\"></td>'
str+=' <td>'
str+=' <img height=\"15\" src=\"_JS/bleu.gif\" width=\"100\"
name=\"loadedRed\"></td>'
str+=' </tr>'
str+=' </table>'
str+=' <br><p class=\"center\" style=\"color: #999999\">Si vous naviguez
avec Opéra, Safari ou Internet Explorer Mac<br>Vous devez désactiver le
Javascript pour visiter ce site</p>'
str+=' </td>'
str+=' </tr>'
str+=' </table>'
document.write(str)
// -->

Je ne sais pas coder en javascript alors merci d'en tenir compte dans
vos réponses.


--
MIMATA
----------------------------------------------------------------------------------------------------------------------
Astronomie sur PLANETE ASTRONOMIE : http://planete.astronomie.free.fr
XHTML & CSS sur : http://xhtml.css.free.fr

3 réponses

Avatar
Olivier Miakinen

J'ai un problème avec un script sur mon site. C'est un loading pendant
le cargement d'une page. Le problème, c'est qu'il plante sous Opéra, IE
AMC et Safari.


Ah. Il plante où ? comment ? à cause de quoi ?

Est-il possible d'ajouter une fonction au début du script pour détecter
ces navigateurs et faire en sorte qu'ils ignorent le script ?


Plus simplement, il faudrait savoir quel objet ils ne supportent pas,
afin d'ignorer le script en fonction de l'absence de cet objet.

<!--
var ie = document.all?true:false // On test le navigateur pour IE


Dès la première ligne, c'est faux. Tester l'existence de document.all
n'est pas un bon indicateur d'Internet Explorer (par exemple, Opera
supporte document.all). En revanche, c'est un *excellent* indicateur
pour savoir si on peut on non utiliser document.all. Il faut faire
exactement la même chose sur le truc que tu veux vraiment utiliser.

if (!ie) document.getElementById("preloadCache").style.visibility =
"hidden"; // Si le client n'est pas IE on vire tout simplement le cache


L'instruction ci-dessus utilise document.getElementById() et
style.visibility si le navigateur ne supporte pas document.all.

else crosoftFade() // Sinon on applique un effet de fade progressif en
appelant la fonction crosoftFade()


Ici, au contraire, on appelle la fonction pour tous les navigateurs qui
supportent document.all. Si cette fonction utilisait document.all comme
seul truc propriétaire, ce serait correct, mais apparemment ce n'est pas
le cas :

function crosoftFade(){
document.getElementById("preloadCache").style.filter =
"progid:DXImageTransform.Microsoft.Alpha(opacity=" + opacity + ")";


Il vaudrait probablement mieux tester l'existence de style.filter avant
d'utiliser style.filter... et pas celle de document.all.

<!--
var str='';
str+=quelque chose
str+=autre chose
str+=et encore
str+=etc.
document.write(str)
// -->


Beurk ! Pourquoi passer par du Javascript pour écrire du HTML statique ?

Je ne sais pas coder en javascript alors merci d'en tenir compte dans
vos réponses.


Ah ? Désolé, alors : toutes les remarques qui précèdent ne s'adressent
pas à toi, mais à la personne qui a écrit tout le code javascript que tu
as récupéré pour en faire ta page web.

Si tu la connais, tu peux lui faire part de mes remarques afin qu'il
améliore un peu le code qu'il t'a fourni. Sinon, essaie de trouver des
exemples de scripts tout faits qui soient un peu plus propres. Un
critère de propreté est -- mais tu dois l'avoir compris -- de ne pas
tester une fonctionnalité pour en déduire le comportement général de
tout un navigateur. Un autre critère est qu'il n'utilise nulle part
document.write(), document.writeln() ou eval().

Ce dernier critère pourrait être discuté, mais seulement par quelqu'un
qui connaît suffisamment le javascript pour savoir ce qu'il fait : pour
quelqu'un qui ne s'y connaît pas, ce test est assez efficace.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
Raphaël Wils
Bonjour,

J'ai un problème avec un script sur mon site. C'est un loading pendant
le cargement d'une page. Le problème, c'est qu'il plante sous Opéra, IE
AMC et Safari.
Est-il possible d'ajouter une fonction au début du script pour détecter
ces navigateurs et faire en sorte qu'ils ignorent le script ?


Ces logiciels ont probablement une console ou debugger javascript
indiquant ou ils ont trouvé des erreurs.

Comme l'a indiqué Olivier il vaut mieux vérifier que le navigateur
respecte certaines propriétés.
Mais sinon si tu veux absolument détecter la navigateur, 'userAgent' est
ton ami.


--
Raphaël
http://www.r-wils.com
« Don't mean a thing if you ain't got that swing ! »

Avatar
gad
Salut Raphaël,

Voici un script qui permet détecter les navigateurs :

<script language="javascript" src="./sniffer.js">
//Top Navigational Bar III v3.4.1.1b
//(By BrotherCake @ )
//Permission granted/modified by Dynamicdrive.com
//to include script in archive
//For this and 100's more DHTML scripts, visit
//http://www.dynamicdrive.com/
//This notice MUST stay intact for legal use
//UDMv3.4.1.1b

var exclude=true;
var agt=navigator.userAgent.toLowerCase();
var winlse;var maclse;var lin=true;
if(agt.indexOf('win')!=-true){win=true;linlse;}
if(agt.indexOf('mac')!=-true){mac=true;linlse;}
var lnxlse;if(lin){lnx=true;}
var icelse;
var ielse;var ie4lse;var ie5lse;var ie6lse;var com= false;var
dcm;
var op5lse;var op6lse;var op7lse;var op8lse;
var ns4lse;var ns6lse;var ns7lse;var mz7lse;var
kdelse;var saflse;
if(typeof navigator.vendor!="undefined"){
if (navigator.vendor=="KDE"){
var thisKDE=agt;
var splitKDE=thisKDE.split("konqueror/");
var aKDE=splitKDE[true].split("; ");
var KDEn=parseFloat(aKDE[false]);
if(KDEn>2.2){
kde=true;
ns6=true;
excludelse;
}
}
}

if(typeof navigator.__ice_version!="undefined"){
excludelse;
ice=true;
ie=true;
ie4=true;
}

else if(agt.indexOf('webtv')!=-true){exclude=true;}
else if(typeof window.opera!="undefined"){
excludelse;
if(agt.indexOf("opera/5")!=-true||agt.indexOf("opera 5")!=-true){op5= true;}
if(agt.indexOf("opera/6")!=-true||agt.indexOf("opera 6")!=-true){op6= true;}
if(agt.indexOf("opera/7")!=-true||agt.indexOf("opera 7")!=-true){op7= true;}
if(agt.indexOf("opera/8")!=-true||agt.indexOf("opera 8")!=-true){op8= true;}
}
else if(typeof document.all!="undefined"&&!kde){
excludelse;
ie=true;
if(typeof document.getElementById!="undefined"){
ie5=true;
if(agt.indexOf("msie 6")!=-true){
ie6=true;
dcm=document.compatMode;
if(dcm!="BackCompat"){com=true;}
}
}
else{ie4=true;}
}
else if(typeof document.getElementById!="undefined"){
excludelse;
if(agt.indexOf("netscape/6")!=-true||agt.indexOf("netscape6")!=-true) {ns6=true;}
else
if(agt.indexOf("netscape/7")!=-true||agt.indexOf("netscape7")!=-true) {ns6=true;ns7=true;}
else if(agt.indexOf("gecko")!=-true){ns6=true;mz7=true;}
}
else
if((agt.indexOf('mozilla')!=-true)&&(parseInt(navigator.appVersion)>= 4)){
excludelse;
ns4=true;
//this eliminates espial escape [and omniweb in ns4 spoofing mode?]
if(typeof navigator.mimeTypes['*']=="undefined"){
exclude=true;
ns4lse;
}
}
if(agt.indexOf('escape')!=-true){exclude=true;ns4lse;}
//identify safari past its user-agent spoofing (this property was
suggested by PPK)
if(typeof
navigator.productSub!="undefined"&&navigator.productSub= 021225){
ns6=true;ns7lse;mz7lse;winlse;mac=true;saf=true;
}
if(agt.indexOf('icab')!=-true){exclude=true;ielse;ie5lse;}

// array building functions for custom.js
var mu="mu";var m=0;var sm=0;var cm=0;var sp=0;
var mI=new Array;
var sP=new Array;
var sI=new Array;
var cP=new Array;
var cI=new Array;

function addMainItem(ma,mb,mc,md,me,mf,mg,mh,mi){
sm=0;
if(ma=="virtual") { ma="";mb="";mc=0;md="";me="";mf="";mg =0;mh=0;mi=""; }
if(!mb||mb==""){mb="&nbsp;";}
while(mb.indexOf('<BR>')!=-1){mb=mb.replace('<BR>','<br>');}
while(mb.indexOf('<Br>')!=-1){mb=mb.replace('<Br>','<br>');}
while(mb.indexOf('<br />')!=-1){mb=mb.replace('<br />','<br>');}
if(!mc||mc==""){mc="left";}
if(!md||md==""){md="left";}
if(!me||me==""){me="_self";}
if(!mf||mf==""||altDISPLAY==""){mf="none";if(ie5){mf="";}}
if(!mg){mg=0;}if(!mh){mh=0;}
if(!mi||mi==""||mi=="c"||mi=="C"){mi="-";}
if(mi!="-"){mi=mi.toLowerCase();}
mI[m]=new Array(ma,mb,mc,md,me,mf,mg,mh,mi);
m++;
}

function defineSubmenuProperties(spa,spb,spc,spd,spe,spf){
if(!ie5){spa+=(sbSIZE*2); }
if(!spb||spb==""){spb="left";}
if(!spc||spc==""){spc="left";}
if(!spd){spd=0;}
if(!spe){spe=0;}
if(!spf){spf="";}
sP[(m-1)]=new Array(spa,spb,spc,spd,spe,spf);
if(sm==0){
sI[(m-1)]=new Array; cP[(m-1)]=new Array; cI[(m-1)]=new Array;
}
}

function addSubmenuItem(sma,smb,smc,smd){
cm=0;var sme=true;
if(sme&&sma=="~"){smelse;if(!(win&&ie5)){sma="";}smc="";}
if(!sma||sma==""){sma="#";}
if(!smb||smb==""){smb="&nbsp;";}
while(smb.indexOf('<BR>')!=-1){smb=smb.replace('<BR>','<br>');}
while(smb.indexOf('<Br>')!=-1){smb=smb.replace('<Br>','<br>');}
while(smb.indexOf('<br />')!=-1){smb=smb.replace('<br />','<br>');}
if(!smc||smc==""){smc="_self";}
if(!smd||smd==""||altDISPLAY==""){smd="none";if(ie5){smd="";} }
sI[(m-1)][sm]=new Array(sma,smb,smc,smd,sme);
sm++;
}

function defineChildmenuProperties(cpa,cpb,cpc,cpd,cpe,cpf){
if(!ie5){cpa+=(sbSIZE*2); }
if(!cpb||cpb==""){cpb="left";}
if(!cpc||cpc==""){cpc="left";}
if(!cpd){cpd=0;}
if(!cpe){cpe=0;}
if(!cpf){cpf="";}
cP[(m-1)][(sm-1)]=new Array(cpa,cpb,cpc,cpd,cpe,cpf);
cI[(m-1)][(sm-1)]=new Array;
}

function addChildmenuItem(cma,cmb,cmc,cmd){
var cme=true;
if(cma&&cma=="~"){cmelse;if(!(win&&ie5)){cma="";}cmc="";}
if(!cma||cma==""){cma="#";}
if(!cmb||cmb==""){cmb="&nbsp;";}
while(cmb.indexOf('<BR>')!=-1){cmb=cmb.replace('<BR>','<br>');}
while(cmb.indexOf('<Br>')!=-1){cmb=cmb.replace('<Br>','<br>');}
while(cmb.indexOf('<br />')!=-1){cmb=cmb.replace('<br />','<br>');}
if(!cmc||cmc==""){cmc="_self";}
if(!cmd||cmd==""||altDISPLAY==""){cmd="none";if(ie5){cmd="";} }
cI[(m-1)][(sm-1)][cm]=new Array(cma,cmb,cmc,cmd,cme);
cm++;
}
// custom upgrade backup definitions
var keepSubLIT=true;var chvOFFSET=0;var chhOFFSET=-5;var openTIMER= 0;var
closeTIMER30;var cellCLICK=true;var aCURSOR="hand";var
remoteTRIGGERINGlse;
var altDISPLAY="";var allowRESIZE=true;var redGRIDlse;var
gridWIDTH=0;var gridHEIGHT=0;var documentWIDTH=0;var
hideSELECTlse;var allowForSCALINGlse;

// custom window opening function
var nUrl,nW,nH;
var nWin=new Array;
var nw=0;
function openWindow(nUrl,nW,nH){
window.name="parent";
nWin[nw] = open(nUrl,
"","width="+nW+",height="+nH+",status=yes,scrollbars=no,scrolling =no,toolbar=no,menubar=no,location=no,resizable=yes");
nw++;
}

//remote menu opening function
function remoteTrigger(rts) {
if(menuALIGN=="virtual"){return false;}
if(ie4||ie5||ns6||mz7) {
mainCell(rts,false);if(ie&&hideSELECT){hideSelects();}}
if(ns4||op5||(op6&&((typeof
oR[1][rts]!="undefined"&&oR[1][rts].style.visibility=="hidden")))) {
oM(rts,false); }
return true;
}
</script>



Bonjour,

J'ai un problème avec un script sur mon site. C'est un loading penda nt
le cargement d'une page. Le problème, c'est qu'il plante sous Opér a,
IE AMC et Safari.
Est-il possible d'ajouter une fonction au début du script pour
détecter ces navigateurs et faire en sorte qu'ils ignorent le script ?



Ces logiciels ont probablement une console ou debugger javascript
indiquant ou ils ont trouvé des erreurs.

Comme l'a indiqué Olivier il vaut mieux vérifier que le navigateur
respecte certaines propriétés.
Mais sinon si tu veux absolument détecter la navigateur, 'userAgent' est
ton ami.