🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
9 messages
9 total messages Started by Peter May Wed, 26 Aug 2009 10:49
Opera i getElementsByTagName("img")[0].onload
#49258
Author: Peter May
Date: Wed, 26 Aug 2009 10:49
31 lines
1652 bytes
Jest prosta lista:

<ul>
<li><a href="..."><img src="..."/></a></li>
<li><a href="..."><img src="..."/></a></li>
[...]
</ul>

którą:

1. Pobieram xhr-em.
2. Wstawiam do kontenera o id="x".
3. Chcę uruchomić funkcję jakasfunkcja() zaraz po załadowaniu pierwszego 
obrazka z tej listy i robię tak:

x.getElementsByTagName("img")[0].onload = function(){
  jakasfunkcja();
}

Problem w tym, że o ile na Firefox 3, IE 7 i Safari 4 działa to 
poprawnie, o tyle  w Operze (moja 10.00 Beta 3) jakasfunkcja() nie jest 
wywoływana. Sprawdzam przez alert(ABC.getElementsByTagName("img")[0]) co 
będę miał w wyniku na Operze i dostaję:

[object HTMLImageElement]

A zatem Opera widzi obiekt, ale funkcji nie wywołuje po załadowaniu 
obrazka. Czy to jakiś bug? Czy może coś pominąłem w kodzie?

-- 
Peter
Re: Opera i getElementsByTagName("img")[0].onload
#49259
Author: Exe Very Cute
Date: Wed, 26 Aug 2009 13:25
13 lines
1487 bytes
Peter May pisze:

> Problem w tym, że o ile na Firefox 3, IE 7 i Safari 4 działa to 
> poprawnie, o tyle  w Operze (moja 10.00 Beta 3) jakasfunkcja() nie jest 
> wywoływana. Sprawdzam przez alert(ABC.getElementsByTagName("img")[0]) co 
> będę miał w wyniku na Operze i dostaję:

ZTCW to Opera wywoła load tylko wtedy gdy obrazka nie ma w cache 
przeglądarki i zostaje on faktycznie pobrany z serwera. Nie wiem czy to 
jest jeszcze aktualna wiedza ;-]

Pozdr
Exe Very Cute
Re: Opera i getElementsByTagName("img")[0].onload
#49260
Author: Peter May
Date: Wed, 26 Aug 2009 13:33
21 lines
1727 bytes
Exe Very Cute pisze:
> Peter May pisze:
> 
>> Problem w tym, że o ile na Firefox 3, IE 7 i Safari 4 działa to 
>> poprawnie, o tyle  w Operze (moja 10.00 Beta 3) jakasfunkcja() nie 
>> jest wywoływana. Sprawdzam przez 
>> alert(ABC.getElementsByTagName("img")[0]) co będę miał w wyniku na 
>> Operze i dostaję:
> 
> ZTCW to Opera wywoła load tylko wtedy gdy obrazka nie ma w cache 
> przeglądarki i zostaje on faktycznie pobrany z serwera. Nie wiem czy to 
> jest jeszcze aktualna wiedza ;-]

A no właśnie dokładnie taki efekt teraz widzę po głębszych testach. 
Jeśli cache jest pusty i obiekt ładuje się pierwszy raz, to zdarzenie 
onload jest wywoływane. Jeśli z cache, to faktycznie nie jest.

Pytanie tylko jak to naprawić?

-- 
Peter
Re: Opera i getElementsByTagName("img")[0].onload
#49261
Author: Exe Very Cute
Date: Wed, 26 Aug 2009 15:22
7 lines
1263 bytes
Peter May pisze:
> Pytanie tylko jak to naprawić?

Obejść. Psując cache. Innego pomysłu nie mam.

Pozdr
Exe Very Cute
Re: Opera i getElementsByTagName("img")[0].onload
#49262
Author: Peter
Date: Wed, 26 Aug 2009 17:33
10 lines
1192 bytes
Exe Very Cute pisze:
> Peter May pisze:
>> Pytanie tylko jak to naprawić?
> 
> Obejść. Psując cache. Innego pomysłu nie mam.

Albo wywołać funkcję dla Opery bez zdarzenia onload. Trudno.

-- 
Peter
Re: Opera i getElementsByTagName("img")[0].onload
#49263
Author: nalesnik
Date: Thu, 27 Aug 2009 06:33
16 lines
1274 bytes
Peter wrote:
> Exe Very Cute pisze:
>> Peter May pisze:
>>> Pytanie tylko jak to naprawić?
>>
>> Obejść. Psując cache. Innego pomysłu nie mam.
> 
> Albo wywołać funkcję dla Opery bez zdarzenia onload. Trudno.
> 

img.src = img.srs + '?someRandString'
pomoze?

-- 
pozdr
nalesnik
Re: Opera i getElementsByTagName("img")[0].onload
#49264
Author: nalesnik
Date: Thu, 27 Aug 2009 06:34
16 lines
1296 bytes
Peter wrote:
> Exe Very Cute pisze:
>> Peter May pisze:
>>> Pytanie tylko jak to naprawić?
>>
>> Obejść. Psując cache. Innego pomysłu nie mam.
> 
> Albo wywołać funkcję dla Opery bez zdarzenia onload. Trudno.
> 

img.src = img.src + '?someRandString';
pomoże?

-- 
pozdr
nalesnik
Re: Opera i getElementsByTagName("img")[0].onload
#49265
Author: porneL
Date: Thu, 27 Aug 2009 17:24
23 lines
1564 bytes
On Thu, 27 Aug 2009 07:34:03 +0100, nalesnik <mu5k@o2.o2.o2.o2.pl> wrote:

>>>> Pytanie tylko jak to naprawić?
>>>
>>> Obejść. Psując cache. Innego pomysłu nie mam.
>>
>> Albo wywołać funkcję dla Opery bez zdarzenia onload. Trudno.
>>
>
> img.src = img.src + '?someRandString';
> pomoże?

To jest podpada pod psucie cache, tylko że jest jeszcze bardziej szkodliwą  
metodą.

Spróbuj addEventListener()(z capture i bez).

Jak to nie da rady, to można zrobić własną nędzną emulację onload przez  
sprawdzanie image.width>0 timerem.

-- 
http://pornel.net
this.author = new Geek("porneL");
Re: Opera i getElementsByTagName("img")[0].onload
#49266
Author: Peter
Date: Thu, 27 Aug 2009 21:09
31 lines
1874 bytes
porneL pisze:
> On Thu, 27 Aug 2009 07:34:03 +0100, nalesnik <mu5k@o2.o2.o2.o2.pl> wrote:
> 
>>>>> Pytanie tylko jak to naprawić?
>>>>
>>>> Obejść. Psując cache. Innego pomysłu nie mam.
>>>
>>> Albo wywołać funkcję dla Opery bez zdarzenia onload. Trudno.
>>>
>>
>> img.src = img.src + '?someRandString';
>> pomoże?
> 
> To jest podpada pod psucie cache, tylko że jest jeszcze bardziej 
> szkodliwą metodą.
> 
> Spróbuj addEventListener()(z capture i bez).

Czyli przez:

obiekt.addEventListener("load", funkcja, false);

Rzecz jasna, z warunkiem dla Opery.

> Jak to nie da rady, to można zrobić własną nędzną emulację onload przez 
> sprawdzanie image.width>0 timerem.

Fakt. Można też tak, ale rzeczywiście nędzne :/

-- 
Peter
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads