Kopírování do schránky

U Jdem.cz jsem narazil na problém při implementaci funkce "kopírování textu do schránky". Ono to totiž není tak prosté, jak by se zdálo... Jedno možné řešení nabízím v článku.

Pokud někdo zkoušel implementovat v JavaScriptu funkci "zkopírovat do schránky", tak jistě zjistil, že to není taková procházka růžovým sadem, jak by se mohlo zdát.

Tedy - v IE6 šlo použít postup, při němž byl z textu vytvořen Range a na něj použit příkaz Copy (range.execCommand('Copy');), ovšem ve FF tenhle postup selhával kvůli bezpečnostním omezením (vcelku pochopitelné - přeci nechcete, aby se vám stránky jen tak halabala hrabaly v clipboardu).

Řešilo se to oklikou - přes Flash. Fór byl v tom, že v non-IE prohlížečích byl vytvořen skrytý Flashový objekt, který vzal parametr a zkopíroval ho do clipboardu. (crossbrowser copy to clipboard)

Stejnou techniku jsem použil i na Jdem.cz, ale v posledních dnech mi začali lidi psát, že kopírování do schránky nefunguje. Nejprve jsem netušil v čem by mohl být problém, ale včera mi napsal Lukáš Havrlant (DĚKUJI!), že se pravděpodobně jedná o problém s Flashem, který (snad) v nové verzi začal požadovat, aby operace s clipboardem byla součástí nějaké uživatelské akce (kliknutí na něco, stisk tlačítka) - bližší info na Flash.cz.

Lukáš mi rovnou poslal (opět děkuji!) i jednoduchý Flashový udělátor, který obsahuje tlačítko "Kopírovat". Nejprve jsem ho nasadil, ale pak jsem zjistil, že tudy cesta nevede, protože já potřeboval, abych si mohl text na tlačítku změnit ad lib, a to Lukášův swf neuměl.

Chvíli jsem přemýšlel, jak to vyřešit, Flashe nemaje a neznaje, a nakonec jsem si vzpomněl, že jsem vlastně dělal s Flexem. Po pár minutách googlování bylo "univerzální kopírovací tlačítko" na světě. V akci ho můžete vidět na Jdem.cz a pokud ho chcete použít, máte ho k dispozici i se zdrojovým MXML: FlexCopier

Není to nijak dokonalé řešení a vůbec nejhorší je, že zabírá 200 kilo, ale jiné po ruce bohužel nemám. Pokud se najde šikovný flashař, který napíše "lehčí" obdobu a dá ji k dispozici, budu jen rád. Do té doby to je jediné řešení, které funguje, a jediná možná náhrada výše zmíněného výborného, ale bohužel už pomalu nefunkčního, flashového řešení...

Máte-li někdo nějaké jiné ověřené řešení, jak zkopírovat kliknutím na tlačítko text do clipboardu, sem s ním!

Komentáře

http://code.google.com/p/zero

No, menší to je, to se musí

No, menší to je, to se musí nechat... :) Ale ty opichy co okolo toho dělají s DOMem mě na první pohled docela děsí... Nezkoumal jsem to do hloubky, třeba to bude jednoduché, ale na první pohled to tak fakt nepůsobí. Každopádně díky za tip!

Hehe, tiez som sa na prvy

Hehe, tiez som sa na prvy pohlad zlakol, ale v utrobach som nasiel minimal example a ten vobec nevyzera zle.

http://code.google.com/p/zeroclipboard/wiki/Instructions#Minimal_Example

Aha, já myslel, že je to

Aha, já myslel, že je to fíčura a on to byl bug... :-)

Ufff a díky za článek. Já už

Ufff a díky za článek. Já už kvůli tomu nefunkčnímu kopírování nainstaloval antivir, pak přeinstaloval Operu, pak celej kompl a o víkendu jsem se chystal přebagrovat zahradu a rozložit dům na cihly. A von to zatím fleš...

No vida, a já jsem si říkal,

No vida, a já jsem si říkal, že se mi všechny prohlížeče zbláznily :o)

Pro snížení velikosti SWF

Pro snížení velikosti SWF souboru lze použít framework cache, viz např. http://livedocs.adobe.com/flex/3/html/help.html?content=rsl_09.html .

Volby prohlížení komentářů

Vyberte si, jak chcete zobrazovat komentáře a klikněte na „Uložit změny“.