[javascript] Problema con internet explorer 8 [risolto]
Buonasera a tutti
ho dei problemi con IE8 quando devo eseguire la mia applicazione web; in pratica tramite un tasto dovrei lanciare una animazione (un immagine che appare e scompare), solo che il debug di IE mi da errore ad un if, di preciso il primo if dentro la funzione "inizia()" (mi dice 'interfaccia sconosciuta'), non riesco a capire il perché, qualcuno può aiutarmi? di seguito il codice:

ho dei problemi con IE8 quando devo eseguire la mia applicazione web; in pratica tramite un tasto dovrei lanciare una animazione (un immagine che appare e scompare), solo che il debug di IE mi da errore ad un if, di preciso il primo if dentro la funzione "inizia()" (mi dice 'interfaccia sconosciuta'), non riesco a capire il perché, qualcuno può aiutarmi? di seguito il codice:
var stop; var immagine; var paragrafo; var elemento; var tasti3; var tasti4; function lampeggia(imm,pr){ if(imm.style.visibility == 'visible' || pr.style.background == 'red'){ imm.style.visibility = 'hidden'; pr.style.background = 'red'; } else { imm.style.visibility = 'visible'; pr.style.background = 'yellow'; } } function fermati(){ blocca = document.getElementById('none'); blocca.getElementsByTagName('button')[1].disabled = false; clearInterval(stop); elemento.removeChild(immagine); elemento.removeChild(paragrafo); partasti.removeChild(tasti3); partasti.removeChild(tasti4); elemento.getElementsByTagName('button')[0].disabled = false; elemento.getElementsByTagName('button')[1].disabled = true; alert('Lavorazione terminata con successo'); } function inizia(){ for(t=0; t<2; t++){ if(campo[t].value>Number(vettore[t]) || campo[t].value=='' || campo[t].value<=0 || isNaN(campo[t].value)){ campo[t].value = 'ERRORE!'; campo[t].style.background = 'red'; return; } else campo[t].style.background = 'white'; } blocca = document.getElementById('none'); blocca.getElementsByTagName('button')[1].disabled = true; elemento = document.getElementById('a'); elemento.getElementsByTagName('button')[1].disabled = false; tasti3 = document.createElement('button'); tasti4 = document.createElement('button'); valore3 = document.createTextNode('Aumenta velocità'); valore4 = document.createTextNode('Diminuisci velocità'); tasti3.appendChild(valore3); tasti4.appendChild(valore4); tasti3.attachEvent('onclick',aumenta); tasti4.attachEvent('onclick',diminuisci); tasti4.disabled = true; partasti.appendChild(tasti3); partasti.appendChild(tasti4); immagine = document.createElement('img'); immagine.src = './immagini/lavori-in-corso.gif'; immagine.id = 'posizionamento'; immagine.alt = 'lavori in corso'; opera = document.getElementById('a'); opera.appendChild(immagine); opera.getElementsByTagName('button')[0].disabled = true; paragrafo = document.createElement('p'); paragrafo.setAttribute('id','locazione'); paragrafo.style.background = 'yellow'; scritta = document.createTextNode('LAVORAZIONE IN CORSO'); paragrafo.appendChild(scritta); opera.appendChild(paragrafo); stop = setInterval('lampeggia(immagine,paragrafo)',2000); setTimeout('fermati()',30000); } function termina(){ blocca = document.getElementById('none'); blocca.getElementsByTagName('button')[1].disabled = false; clearInterval(stop); elemento.removeChild(immagine); elemento.removeChild(paragrafo); partasti.removeChild(tasti3); partasti.removeChild(tasti4); elemento.getElementsByTagName('button')[0].disabled = false; elemento.getElementsByTagName('button')[1].disabled = true; alert('Lavorazione terminata forzatamente'); }
Risposte
IE fa schifo.
comunque campo non è stato definito
comunque campo non è stato definito
campo è definito in un altro script come variabile globale (è un array in realtà), mi sono dimenticato di dirlo. Praticamente tutta l'applicazione funziona con Firefox, ma non funziona con IE
il debug mi da errore proprio in quel punto
](/datas/uploads/forum/emoji/eusa_wall.gif)
Cosa è 'vettore'?
allora alcune cose, tipo array variabili che non sono state definite sono appunto variabili o vettori globali che sono definite all'interno di altri script. L'applicazione è troppo grande e su più file quindi non posso postarla tutta
comunque il debug di IE mi da errore lì, invece la console degli errori di Firefox non mi da nessun tipo di errore (e l'applicazione infatti funziona).

posta la definizione di campo e delle altre variabili contenute in quell'espressione, probabilmente sarà il fatto che IE bisogna di metodi diversi da tutti gli altri browser che preferiscono rispettare gli standard per accedere ai tag html
miopar = new Array(); campo = new Array(); text = new Array(); window.funzione=aggiorna; /*assegno all'oggetto window il "metodo" aggiorna*/ var vettore; var partasti; var x = new Array();
Oltre a quelle presenti nel codice sopra postato, negli altri script c'è la definizione di queste altre variabili e vettori. L'ultima è da sola in uno script (il vettore x), le altre sono definite tutte insieme in un altro script.
Hai provato con IE7? Perché imho il problema è su IE8 e quindi hai bisogno di un workaround, magari
o controlli il browser e fai in un altro modo...
if(isNaN(campo[t].value) || campo[t].value=='' || campo[t].value<=0 || campo[t].value>Number(vettore[t]))
o controlli il browser e fai in un altro modo...
blackorgasm, cosa assegni a campo?
per definizione intendevo che valore\oggetto hai assegnato alle variabili in gioco. è forse un array che deve puntare a dei tags html della pagina? se si, come hai assegnato alle sue celle i tags?
per definizione intendevo che valore\oggetto hai assegnato alle variabili in gioco. è forse un array che deve puntare a dei tags html della pagina? se si, come hai assegnato alle sue celle i tags?
purtroppo l'applicazione deve andare su Firefox 3.# e IE 8, quindi devo farlo funzionare a tutti i costi lì.
Campo è un vettore che contiene 2 numeri inseriti da form (questa form è creata dinamicamente), la funzione inizia serve a controllare che i campi siano stati inseriti correttamente (ovvero rispettando le specifiche contenute nei primi due elementi di 'vettore', che è un altro array alfanumerico precedentemente riempito); se i campi sono giusti vengono creati due bottoni, un'immagine ed un paragrafo dinamicamente.
Scusate le mie difficoltà ma la programmazione non è il mio ambito di studi
Campo è un vettore che contiene 2 numeri inseriti da form (questa form è creata dinamicamente), la funzione inizia serve a controllare che i campi siano stati inseriti correttamente (ovvero rispettando le specifiche contenute nei primi due elementi di 'vettore', che è un altro array alfanumerico precedentemente riempito); se i campi sono giusti vengono creati due bottoni, un'immagine ed un paragrafo dinamicamente.
Scusate le mie difficoltà ma la programmazione non è il mio ambito di studi

"Blackorgasm":
purtroppo l'applicazione deve andare su Firefox 3.# e IE 8, quindi devo farlo funzionare a tutti i costi lì.
Si ma devi isolare il problema, prova con IE7 e controlla se funziona, e dopo prova con il mio workaround - che mette il controllo isNan per primo. Almeno sai da dove partire.
ho messo isNaN per primo ma non è cambiato niente
sempre solito problema, ora provo con IE7

una domanda, ho Windows 7 come SO, e non so se sia possibile installare IE7, in quanto non ho trovato siti dove mi confermano questa cosa 
Comunque ho installato IE9, ed il problema è sempre lì, al solito posto, anche dopo aver fatto il workaround da te consigliatomi, non so dove sbattere la testa, l'errore però ora è: "L'oggetto invocato si è disconnesso dai client corrispondenti".

Comunque ho installato IE9, ed il problema è sempre lì, al solito posto, anche dopo aver fatto il workaround da te consigliatomi, non so dove sbattere la testa, l'errore però ora è: "L'oggetto invocato si è disconnesso dai client corrispondenti".
Dopo un bel po' di tentativi ho trovato che l'errore è proprio nell'array 'vettore', ovvero IE probabilmente non lo riconosce.
Siccome quando 'vettore' viene compilato, Firefox ed IE hanno due comportamenti diversi: FF apre un'altra scheda, dove posso inserire i dati che andranno in 'vettore', mentre IE apre proprio un'altra finestra: può essere questa la causa del malfunzionamento su IE?
Siccome quando 'vettore' viene compilato, Firefox ed IE hanno due comportamenti diversi: FF apre un'altra scheda, dove posso inserire i dati che andranno in 'vettore', mentre IE apre proprio un'altra finestra: può essere questa la causa del malfunzionamento su IE?
Non penso sia quello il problema, in quanto ho impostato ad IE di aprire la pagina in una nuova scheda e non è cambiato nulla.
Penso che il problema sia in "window.opener", mi spiego meglio.
Allora ho una finestra madre che tramite un tasto apre la finestra figlio. La finestra figlio contiene un modulo da compilare; una volta compilato c'è un tasto che invia i dati inseriti (e messi dentro l'array 'x') alla finestra madre tramite attributo con questa sintassi: window.opener.attributo = x;. Dopo il click la finestra figlio viene chiusa e nella finestra madre appaiano due campi input (dove andranno inseriti dati che devono rispettare i primi due campi di 'vettore'), e dei paragrafi contenenti dati presi sempre da 'vettore'. La variabile vettore viene riempita nello script che crea tutto questo tramite assegnamento vettore=window.attributo;. Vettore è una variabile globale.
In FF questo mi è permesso, ma in IE no. Qualcuno conosce una alternativa valida?
Penso che il problema sia in "window.opener", mi spiego meglio.
Allora ho una finestra madre che tramite un tasto apre la finestra figlio. La finestra figlio contiene un modulo da compilare; una volta compilato c'è un tasto che invia i dati inseriti (e messi dentro l'array 'x') alla finestra madre tramite attributo con questa sintassi: window.opener.attributo = x;. Dopo il click la finestra figlio viene chiusa e nella finestra madre appaiano due campi input (dove andranno inseriti dati che devono rispettare i primi due campi di 'vettore'), e dei paragrafi contenenti dati presi sempre da 'vettore'. La variabile vettore viene riempita nello script che crea tutto questo tramite assegnamento vettore=window.attributo;. Vettore è una variabile globale.
In FF questo mi è permesso, ma in IE no. Qualcuno conosce una alternativa valida?
come apri la finestra? posta un po di codice altrimenti andiamo poco in la
function crea_bottale(){ var s = confirm("Vuoi installare un nuovo bottale?"); if(s){ finestra = window.open('Modulo_Bottale.html'); elemento1 = document.getElementById('none'); elemento1.getElementsByTagName('button')[0].disabled = true; } else return; } function numero(frm,i){ if (isNaN(frm.elements[i].value) || frm.elements[i].value<=0 || frm.elements[i].value == ''){ alert('Errore al punto:'+frm.elements[i].name); flag=true; } else x[i]=frm.elements[i].value; } function spunta(frm,i){ if(frm.elements[i].checked){ x.push(frm.elements[i].value); } else return; } function control(){ if(x.length != 5){ alert('Non hai riempito tutti i campi'); finestra.location.reload(); } } function inoltra(frm){ flag=false; for(var i=0; i<frm.elements.length-1; i++){ if(flag) return; switch(frm.elements[i].type){ case 'text': numero(frm,i); break; case 'radio': spunta(frm,i); break; } } control(); window.focus('Pagina_Principale.html'); window.opener.arr=x; window.opener.funzione(); /*chiamata ed esecuzione della funzione aggiorna presente nell'altro script*/ window.close('Modulo_Bottale.html'); }
questo è uno script condiviso tra la pagina madre e quella figlia: quando clicco sul tasto della pagina madre viene lanciata la funzione "crea_bottale" (per la cronaca il bottale è un macchinario per la concia delle pelli). Quando invece clicco sul tasto che mi restituisce l'array x alla pagina madre viene lanciata la funzione "inoltra", le altre funzioni sono di controllo.
non ci trovo nulla di sbagliato, ma quando e come assegni i valori a campo? cioè nella funzione in cui ti da errore accedi ai valori di campo ma con che codice ce li assegni? posta quel codice, magari gli assegni dei valori in un modo che a IE non piace
no no campo non c'entra nulla, perché ho provato a togliere la condizione "campo[t].value>Number(vettore[t])" e il programma viaggia. Ho sostituito anche a 'vettore' altre condizioni e il tutto funziona anche con IE, quindi l'errore è proprio lui. Temo che sia "window.opener", perché sul web ho trovato che altre persone hanno avuto problemi simili, ma non nel passare alla finestra madre un intero oggetto come me
.
Comunque per completezza i valori di campo li assegno tramite una form (che viene generata dinamicamente da un altro script ancora).

Comunque per completezza i valori di campo li assegno tramite una form (che viene generata dinamicamente da un altro script ancora).
Allora probabilmente è un problema di protezione. A causa di problemi legati al sistema sul quale funziona, IE ha delle opzioni terrificanti. Prova dalle opzioni a disattivare tutte le protezioni possibili (esegui script, permetti script et al, non me le ricordo certo tutte a mente... sono legione).
Noi per esempio utilizziamo alcune webapps di fornitori esterni, e molte hanno delle pagine di test; spesso su firefox è sufficiente dire "abilita javascript" ed il test passa, mentre su IE bisogna mettere l'indirizzo fra i "siti attendibili" e poi abilitare indistintamente tutte le esecuzioni di script.
Noi per esempio utilizziamo alcune webapps di fornitori esterni, e molte hanno delle pagine di test; spesso su firefox è sufficiente dire "abilita javascript" ed il test passa, mentre su IE bisogna mettere l'indirizzo fra i "siti attendibili" e poi abilitare indistintamente tutte le esecuzioni di script.
ho provato da opzioni internet -> avanzate e poi anche in sicurezza a disabilitare tutte le limitazioni degli script ma niente
non mi resta che parlarne col professore. Un metodo alternativo a window.opener esiste?
