IE8 zobrazuje jen část obrázku vráceného Ajaxem, zatímco Firefox3.6 správně celý

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Martin
Člen | 171
+
0
-

Zdravím.

Problém přesně popisuje titulek a nevím co s tím. Nepoužil jsem snippety, ale vlastní obsluhu Ajaxu v jquery, mohl by to být důvod? Asi to tak úplně nesouvisí s Nette, ale celá aplikace je v něm jinak napsaná a předpokládám, že se s tímto problémem tady také mohl někdo setkat. Do FF dojde obrázek bez problémů celý. Bohužel v IE se objeví vždy jen cca prvních 50–100 řádků obrázku. Při následujícím kliku se už čte z nějaké cache (moc ale nechápu, z jaké, ve FF se posílá request vždy znovu). Tušíte někdo, jak si v IE odchytit skutečně došlá data třeba do souboru? Zobrazím-li si je po zapsání do divu pomocí „Nástroje pro vývojáře/Zobrazit/Zdrojový kód/DOM (prvek)“, opravdu je tam asi desetina kódu obrázku. To je ale už po zápisu do divu. Spíš myslím, že v okamžiku, kdy přijdou data ze serveru, jsou ještě kompletní. Nebo i v tom se může IE chovat jinak než FF? Zajímavé je, že ta částečná data mi coby URL ukazuje IE po pravém kliku/vlastnosti obrázku. Je možné, že je to prostě jen omezeným rozsahem URL adresy, za kterou IE obrazová data bůhvíproč považuje?

V presenteru mám následující kód:

public function handleSnimek($snimekId) {
    $zvetsenina = $this->model->getZvetseninaSnimku($snimekId);
    $html = '<div id="content">
        <img src="'
        .
        \Nette\Templating\DefaultHelpers::dataStream($zvetsenina)
        .
        '" width="'.$zvetsenina->getWidth().'" height="'.$zvetsenina->getHeight().'"  alt="Fotografie '.$snimekId.'" />
        </div>
    ';
    echo $html;
    $presenter->terminate();
}

Obrázek vytvářím v Modelu:

    function getZvetseninaSnimku($snimekId)
    {
            $snimek = self::$database->table('fotografie')->where('id',$snimekId)->fetch();
            if ($snimek)
            {
                $NahledFileName = PHOTO_DIR.'/'.$snimek->Directory.'/'.$snimek->Soubor;
                $image = \Nette\Image::fromFile($NahledFileName);
                $image->resize(3000, 3000);
                $image->sharpen();
//                return \Nette\Templating\DefaultHelpers::dataStream($image);
                return $image;
            }
            return NULL;
    }

Vygenerovaný javascript pro zobrazení obrázku po kliknutí na náhled vypadá takto:

onclick='
    $.get("?do=Snimek&amp;presenter=Front:Fotografie",
      { "snimekId": 8370 },
      function(data) {
          $("#content").replaceWith(data);
      }, "html");
      return false;'

Editoval Martin (12. 6. 2011 14:30)

Martin
Člen | 171
+
0
-

Tak ještě jeden poměrně závažný poznatek. Velikost dat v obsahu obrázku v IE je přesně 32768 bajtů. Náhodička, zrovna 2 na patnáctou. Vypadá to, že v IE je rozsah opravdu omezený. Ale lze s tím něco udělat?

Editoval Martin (12. 6. 2011 14:51)

22
Člen | 1478
+
0
-

akorát uložit a načíst normálně, je to omezení IE.

Martin
Člen | 171
+
0
-

Tak i když vyrobím na lokálním disku html soubor s inline obrázkem, FF ho zobrazí celý, zatímco IE jen oněch 32768 bajtů. Ví někdo, jak to obejít? Nechce se mi generovat obrázek na disku serveru, ale nic jiného mne nenapadá. Nebo použít rámec a do něj posílat včetně hlavičky, ale to také není zrovna elegantní.

Martin
Člen | 171
+
0
-

22: dík za odpověď.

Editoval Martin (12. 6. 2011 16:27)

Milo
Nette Core | 1283
+
0
-

A proč to děláš přes data url a né klasicky? Ve smyslu:

$('img#id').src = 'http://url/na/action/getImg?file=xxxx';

A v prezenteru:

public function actionGetImg($file)
{
	$img = new Image($file);
	$img->send();	// Lepsi by ale byla response
	$this->terminate();
}
Martin
Člen | 171
+
0
-

Tak asi vyřešeno. Jsem pitomý, že mne to nenapadlo dřív. Už jsem se málem snažil generovat iframy, když mi došlo, že mohu použít <img src="URL vracející image">. Nejhorší je, že před měsícem jsem to tak měl, jen jsem tam teď vylepšoval zabezpečení u náhledů a nedošlo mi, že pro zvětšeninu (kterou si stejně zobrazí jen přihlášený uživatel) to je nesmysl.

Editoval Martin (12. 6. 2011 17:25)

Martin
Člen | 171
+
0
-

Milo: ano, právě tak to teď dělám, pozdě se mi obnovilo fórum :-(

Jen místo src posílám html celého divu, k obrázkům mám i ankety a další závislé kousky.

Editoval Martin (12. 6. 2011 23:15)