[PHP/JavaScript] - Onload event wordt genegeerd bij ob_start

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Hallo!

Nu kom ik wel iets heel vreemds tegen ... of wellicht denk ik verkeerd. In PHP gebruik ik 'ob_start("ob_gzhandler")' om output buffering aan te zetten en vervolgens onderstaande code om aan het eind van de output de buffer met zlib te comprimeren en naar de browser te sturen (Code komt van php.net)
code:
1
2
3
4
5
6
7
8
9
10
    $gzip_contents = ob_get_contents();
    ob_end_clean();
    $gzip_size = strlen($gzip_contents);
    $gzip_crc = crc32($gzip_contents);
    $gzip_contents = gzcompress($gzip_contents, 6);
    $gzip_contents = substr($gzip_contents, 0, strlen($gzip_contents) - 4);
    echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
    echo $gzip_contents;
    echo pack('V', $gzip_crc);
    echo pack('V', $gzip_size);


De output waar het in dit geval om gaat, bevat een onload event handler in de <body> tag. Op mijn eigen server werkt dit voor alle browsers en in alle gevallen, daar dus geen problemen (zlib v1.1.4). Wanneer ik ergens bij een hosting provider de boel neerzet, dan wordt de pagina in IE zonder problemen weergegeven en de onload functies worden gewoon uitgevoerd. In Firefox en Mozilla echter wordt de hele onload functie volledig genegeerd. Bij de provider draait een recentere zlib (v1.2.1.1).

Heeft iemand dit ooit eerder meegemaakt of gezien en/of ziet iemand wellicht dat ik iets fout doe? Ik weet niet zo goed of dit een Firefox/Mozilla bug is, of dat er wellicht een goede oorzaak voor het probleem is aan te wijzen.

Wanneer ik overigens de output buffering volledig uitzet in Firefox/Mozilla wordt de pagina weer goed geladen, inclusief alle javascript functionaliteit. In het geval de buffering aan staat geeft Mozilla's "Venkman" JavaScript debugger geen JavaScript fouten ... de onload wordt simpelweg genegeerd.

Alle info en invalshoeken zijn welkom ...

Acties:
  • 0 Henk 'm!

  • dajappie
  • Registratie: Januari 2005
  • Laatst online: 13:10
Misschien een probleem dat Firefox nog meer data verwacht en daarom de onLoad niet uitvoert? Met de header() de volledige grootte meegeven in content-length misschien? En een nette exit, zie hier een probleem van iemand gevonden op php.net http://nl3.php.net/header:

With output buffering on, when sending headers that shouldn't have any data after them, be sure to erase the buffer before exit()ing the script! Like this:

PHP:
1
2
3
4
<?php
ob_clean();
exit();
?>


If you don't erase the buffer, in case it was not empty, after sending the headers PHP will still send the buffer content to the browser.

I had Firefox show strange behavior with some of my pages, that it took me quite some time to debug. It was simply because my script was returning 304 Not Modified headers along with the start of an HTML page.

Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Je kunt voor je </body> de javascript code aanroepen die je in je onload hebt staan. Scheelt ook nog eens tijd bij het laden van je pagina...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
De "ob_clean()" en "exit()" bieden helaas geen soelaas. Met betrekking tot de JavaScript onderaan in je pagina ... ik weet dat dat werkt ... maar het gaat toch tegen de standaarden in? <script> tags mogen toch alleen in je <head> staan. Ik probeer daartegen niet de zondigen.

Of is dat inmiddels achterhaald voor wat betreft de W3C?

EDIT:
Zojuist gevonden op http://www.w3.org/TR/html401/interact/scripts.html.
The SCRIPT element places a script within a document. This element may appear any number of times in the HEAD or BODY of an HTML document.
Het mag dus schijnbaar wel gewoon.

[ Voor 34% gewijzigd door gvanh op 21-07-2005 16:44 . Reden: Quote van w3c.org toegevoegd. ]