Autor Zpráva
SkyVessel
Profil
Zdravím.
následující kód nedělá přesně to, co bych chtěl. Když odstraním onload na body, tak se mi stránka přesměruje a nabídne stažení souboru. Když ponechám onload, tak se před nabídnutím stažení zavře, což z kodu je logické...
Jak to napsat, aby se po stažení stránka zavřela?

Díky

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<meta http-equiv="Refresh" name="Expires" content="0; URL=http://adresa/'+ pathName +'";>
<title>Uložení zálohy na disk</title>
</head>
<body onLoad="javascript:self.close();">
</body>
</html>
Kubo2
Profil
SkyVessel:

Nestačilo by niečo takéto?

download.php
<button onclick="window.open('/filename-download.oct', '_blank’) && self.close()">Stiahnuť</button>
_es
Profil
SkyVessel:
To „javascript:“ je tam nadbytočné. Zavrieť v JS ide obvykle len okno (panel), ktoré bolo otvorené v JS. Ako je okno s tou HTML stránkou otvárané? Je nejaký dôvod nepoužiť na stiahnutie obyčajný odkaz fungujúci aj bez JS?
SkyVessel
Profil
Takže asi takhle měl vypadat celý skript, který má za úkol uložit soubor přes ftp. Pokud ukládání selže, má nabídnout stažení souboru na disk. Chtěl jsem, aby se mi to po tom stažení hned zavřelo a aby se to všechno samo pootvíralo i pozavíralo :).
ftp_upload.php
<script>
function winop(pathName){

    windop=window.open("");
    windop.document.open();
    windop.document.writeln('<!DOCTYPE html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1250"><meta http-equiv="Refresh" name="Expires" content="0; URL=http://adresa/data/'+ pathName +'";><title>Uložení zálohy na disk</title></head>');
    windop.document.writeln('<body onLoad="javascript:self.close();"></body></html>');
    windop.document.close();
}
</script>
<?php
$conn_id = ftp_connect($ftp_server);
...
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) {
    echo "<script>alert('Soubor $fileName úspěšně uložen.');</script>";
} else {
    echo "<script>alert('Ukládání souboru  $fileName na ftp selhalo!');
    winop('$fileName');</script>";
}

ftp_close($conn_id);
?>
_es
Profil
SkyVessel:
Chtěl jsem, aby se mi to po tom stažení hned zavřelo a aby se to všechno samo pootvíralo i pozavíralo :).
A nie je tam to „pootváravanie“ a „pozatváravanie“ akosi nadbytočné? Čo to spraviť nejako takto: http://fiddle.jshell.net/w76Lz8d8/show/
SkyVessel
Profil
_es:
A nie je tam to ‚pootváravanie‘ a ‚pozatváravanie‘ akosi nadbytočné?
No když má být nějaký proces ukládání po kliknutí automatizovaný, tak mi přijde logické, aby na mě v případě chyby vyskočilo okno s nabídkou uložení na disk...
A to aby se to samo pozavíralo - tak trochu to je zbytečnost, ale vím, že to docela dobře na některách webech funguje, jen já nevím, jak na to. (já nesnáším zavíraní prázdných oken po ukládání).
Moje znalosti na to nestačí. Tu ukázku, co jsi mi poslal - chvíli jsem na ten zdroják hleděl, ale chytrý z toho nejsem - to už bude na mě jiná třída...
Jestli to není tak úplně jednoduché, tak nic - zavření jednoho vyskakovacího okna ve vyjímečných situacch snad nikoho nezabije :D
_es
Profil
SkyVessel:
No když má být nějaký proces ukládání po kliknutí automatizovaný, tak mi přijde logické, aby na mě v případě chyby vyskočilo okno s nabídkou uložení na disk...
JavaScript (v prehliadači) neumožňuje ukladanie súborov na disk bez nejakého explictného potvrdenia návštevníka. Ani okná nejdú otvárať len tak hocikedy - návštevník musí na niečo kliknúť. Takže chceš nejaký súbor uložiť po kliknutí na niečo a najjednoduchšie riešenie bez otvárania nejakých okien je odkaz smerovaný do skrytého iframe. Server musí ešte vrátiť taký MIME typ, aby sa súbor v iframe nezobrazil, ale bol ponúknutý na uloženie. Skrytý iframe tam ani byť nemusí, stačí obyčajný odkaz na súbor s takým MIME typom, čo sa nezobrazí v prehliadači, no zase to môže inak reagovať pri nejakých chybách.
SkyVessel
Profil
_es:
JavaScript (v prehliadači) neumožňuje ukladanie súborov na disk bez nejakého explictného potvrdenia návštevníka. Ani okná nejdú otvárať len tak hocikedy
Souhlasím. Po kliknutí na zálohu databáze se provede záloha a uloží se to na server. Pokud ukládání na server selže (např málo místa), tak se nabídne uložení na disk.
Skript se sám spustí a nabídne mi okno uložit jako - to je ok. Teď mi šlo o to, aby se po zadání názvu a kliknutí na uložit to okno, které se otvírá fci windop() a zabezpečuje to nabídnutí uložení samo zavřelo. Mě se ho podařilo automaticky zavřít, ale to mi právě nenabídne to okno uložit jako... (No trochu nevím, jak to popsat a nevím, jestli se chápeme, o co mi vlastně jde :)).
_es
Profil
No veď ale to sa ti potom hodí to riešenie s iframe:
Ak sa ukladanie na server vydarí, vráti server také dáta, ktoré sa načítajú do iframe.
Ak sa ukladanie nepodarí, vráti server také dáta, ktoré prehliadač ponúkne uložiť.
Načo do toho „montovať“ nejaké ďalšie okná a potom rozmýšľať, ako a kedy ich zavrieť?
Ak by v prípade úspešného uloženia nebolo treba spätnú väzbu, tak netreba ani iframe, dá sa použiť toto,
SkyVessel
Profil
_es:
No veď ale to sa ti potom hodí to riešenie s iframe:
No - měl jsi pravdu, že jsi měl pravdu :). Kód teď je mnohem jednodužší, kratší a je to cool :).

Já jsem si kdysi nějak vsugeroval do hlavy, že frejmy je největší zlo na světě a tak by mě ani nenapadlo tohle řešení...

Takže mi to už funguje, jen mám dotaz, zda jde nějak odchytit tu událost kliknutí na "uložit jako"... Jde mi o to, že nemůžu mít tu zálohu uloženou na tom hostingu. Když se mi ukládá na ftp, tak ji pak smáznu pomocí unlink(). Ale nemůžu to udělat při tom manuálním ukládání přes iframe, protože to mi pak zavře to okno uložit jako a smázne se, takže už to nejde sejvnout...
_es
Profil
SkyVessel:
Aké „odchytenie udalosti“ myslíš? Kliknutie na odkaz? To, čo návštevník spraví so súborom sa zistiť nedá - môže ho uložiť na disk, otvoriť v nejakej aplikácii či to celé stornovať.
SkyVessel
Profil
_es:
Aha... Takže asi bude lepší emailové upozornění správci webu a udělat to manuálně. Zas tak často to chyby házet nebude doufám :).

Díky za čas a rady. Odcházím chytřejší.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: