Pietro Toniolo

2007-07-26

Strano comportamento di IE7/javascript

Filed under: Software — ptoniolo @ 12:10:08

Su un’applicazione web su cui stiamo lavorando è capitato un errore che può forse far trasparire il meccanismo di funzionamento interno di ie7 nei confronti del codice javascript.

In pratica, una pagina asp.net generava codice html con alcuni blocchi di codice da eseguirsi client-side tra i tag <script>;</script>;. Uno di questi blocchi faceva riferimento ad un oggetto del DOM che nel frattempo era stato fatto sparire. La riga con l’errore diceva qualcosa come:

document.getElementById(“btnChiudi”).click()

e, malgrado quella riga fosse all’interno di un blocco try/catch, il risultato era una messagebox con il messaggio:

Microsoft JScript runtime error: Object doesn’t support this property or method

Il problema era proprio che il bottone btnChiudi era sparito dalla pagina. Ma io mi sarei aspettato che l’errore mandasse l’elaborazione nel ramo catch, invece che buttare fuori una messagebox. Questo è già strano di suo.

Un’altra cosa molto strana è che l’errore viene segnalato su quella pagina .aspx, ma la riga dell’errore era indicata come “42”. Il punto è che, alla riga 42 di quella pagina, anche andando a vedere il codice ricevuto proprio dal browser IE7, quindi andandolo a pescare dalla cache, non c’è nessun codice javascript. Ma… stranamente, se si prendono in considerazione le sole righe della pagina che si trovano tra i tag script, la riga incriminata è proprio la 42! Per questo motivo tra l’altro abbiamo fatto molta fatica a capire quale fosse esattamente l’errore che si presentava. La pagine infatti è modale, e IE non ha gli stessi strumenti di debugging di Firefox!

Apparentemente questo sembrerebbe indicare due cose:

  1. IE7, quando elabora una pagina web, trasferisce il codice javascript in uno “spazio” virtuale, una sorta di pagina code-behind, che contiene il solo codice. Il rendering grafico/html/css della pagina a questo punto viene fatto sul codice html originale, ma l’invocazione di codice dinamico client-side agisce su questa pagina virtuale. Sembra che i tecnici della Micro$oft si siano “dimenticati” di rimappare i numeri di riga per i messaggi di errore, come viene fatto dalle direttive di precompilazione #line del classico c-compiler.
  2. Sembra che alcuni errori siano prodotti in una fase di “compilazione” precedente all’esecuzione vera e propria. Il contesto in cui avviene questa compilazione non tiene conto di eventuali blocchi try/catch. In questo caso il metodo click() veniva evidentemente validato (fallendo) in questa fase di pre-compilazione, mentre avrebbe dovuto generare un errore a run-time, trappato dal successivo blocco catch.

Non posso essere sicuro che l’interpretazione dei fatti che ho esposto rappresenti veramente quello è che effettivamente successo “nella pancia” di IE7, ma gli indizi sembrerebbero portare proprio in quella direzione…

Advertisements

2007-07-24

Mario Vatrini

Filed under: Uncategorized — ptoniolo @ 14:11:14

Ho scoperto solo questa mattina che Mario è morto il 9 marzo di quest’anno.

Anche se non lo sentivo da un paio d’anni, era una di quelle persone che ho sempre tenuto nel mio cuore. Sulla rubrica del cellulare era semplicemente “Mario”.

Mi mancherà. Molto.

2007-07-14

Le tre leggi del Mero

Filed under: Uncategorized — ptoniolo @ 11:52:13

Durante la settimana in barca che mi sono fatto l’altra settimana in Corsica, mi sono tornate in mente le tre leggi del Mero per andare in barca a vela. Le riporto nel blog perché se qualche amico dovesse cercarle con Google, magari arriva qui!

Allora, le leggi sono state esposte dal Mero (Sandro Mentasti), credo durante la prima vacanza che ci siamo fatti in barca a vela, nel ’90 in Croazia. Sono le regole che deve seguire il timoniere, in ordine decrescente di importanza (un po’ come le leggi della robotica, insomma).

  1. Tenere dietro gli altri
  2. Dare in sole all’equipaggio
  3. Mantenere la rotta

Direi che la prima legge la dice lunga sull’aspetto competitivo del nostro andare in barca, anche se in fondo la Coppa America ci ha insegnato che quella non è altro che la regola principale del match-race.

In una successiva vacanza, forse ai Caraibi nel ’93, il Mero ha anche espresso la cosiddetta “legge numero 0”, che si applica prima delle tre leggi, e in qualche modo le riassume e completa:

0. Non siamo qua per divertirci

Create a free website or blog at WordPress.com.