IE8 zobrazuje jen část obrázku vráceného Ajaxem, zatímco Firefox3.6 správně celý
- Martin
- Člen | 171
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&presenter=Front:Fotografie",
{ "snimekId": 8370 },
function(data) {
$("#content").replaceWith(data);
}, "html");
return false;'
Editoval Martin (12. 6. 2011 14:30)
- Martin
- Člen | 171
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
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)