Autor Zpráva
Saix
Profil
Tak tenhle problém zná asi každý. Vložíte si na stránky JS kód odkazující na externí skript a server, ze kterého onen skript načítáte buď běží příliš pomalu nebo vůbec. Výsledek? Vaše stránka se od místa vloženého skriptu přestane načítat a pokud se vůbec načte do konce, tak asi s 10 sekundovým zpožděním.

Co s tím? Doteď jsem to řešil přes iframe, nyní bych se však tomuto poněkud zastaralému tagu rád vyhnul, ale zároveň vyřešil výše zmíněný problém. Lze to vůbec?

Tentokrát jsem na straně toho, kdo generuje embed kódy pro vkládání do cizích stránek. Nerad bych generoval "iframe kód", který by mnoho lidí mohlo na web odmítnout vložit (a vůbec to nepůsobí moc profesionálně), ale zároveň vím, že tento projekt bude tak hardwarově náročný, že dokud se úplně nerozběhne a já nezajistím potřebné optimalizace, může mnou generovaný kód způsobovat prodlevy v načítání stránek těch, kteří si jej na stránky vloží. A tím bych nadělal ještě víc problémů. A skoro každý by kód nakonec odstranil a naembedoval video odjinud. A vkládat object/embed kód s videem přímo do stránek uživatelů (bez použití js) je v tomto případě neproveditelné.
Chamurappi
Profil
Reaguji na Saixe:
nyní bych se však tomuto poněkud zastaralému tagu rád vyhnul
Co je na něm zastaralého? Co se použitelné podpory týče, patří do generace těch mladších.

Nerad bych generoval "iframe kód", který by mnoho lidí mohlo na web odmítnout vložit
Máš asi pravdu, ale externí skript představuje větší bezpečnostní riziko než <iframe>. Má přístup k věcem z hostitelské domény, ke kterým by se skript zevnitř rámce nikdy nedostal (třeba ke cookies). Uvědomělý majitel webu vkládá jen takové externí skripty, jejichž poskytovateli stoprocentně věří. V případě elementu <iframe> jsou rizika podstatně nižší.

může mnou generovaný kód způsobovat prodlevy v načítání stránek
Udělej ho tak, aby se dával až na konec HTML kódu a aby po načtení naplnil innerHTML <div>u s určeným ID.

vkládat object/embed kód s videem přímo do stránek uživatelů (bez použití js) je v tomto případě neproveditelné
Proč? Flash s allowScriptAccess="always" může také přilinkovat externí JavaScript.
Saix
Profil
No osobně mám iframe rád :) ale jak jsem řekl, spousta lidí to tak nechápe a může to působit neprofesionálně. Tvá další reakce to vlastně i potvrzuje.

Řešit to přes ten div a js na konci stránky je dobré rešení, ale ruku na srdce :) Většině "webmasterů" "složitým" postupem tak znepříjemním život, že tam embed ani nevloží a ja odstrouhám. (Těmhle bude iframe ukradený, jenže já chci vyhovět oboum skupinám; možná by bylo řešení generovat dvojí kódy.) Musel bych jim napsat, že skript musí vložit na konec stránky před koncový tag body a "tento div" tam, kde chtějí, aby se video zobrazilo. Nejen, že už s tímhle bude mít mnoho lidí problémy, ale u blogů poskytovaných třetími stranami to ani nepůjde.

"Flash s allowScriptAccess="always" může také přilinkovat externí JavaScript."
Zajímavá myšlenka. O tom si budu ještě muset něco přečíst. Nerad bych tu konkrétní kód rozebíral a stále nejsem přesvědčen, že v mém případě by tohoto šlo využít, ale za předpokladu, že ano, nebude tu zase ten samý problém s nalinkovaným externím javascriptem v případě, že server bude reagovat pomalu? Výhoda iframu je v tom, že každý browser jeho obsah načítá souběžně a nezávisle na stránce, na které je vložen. Nejradši bych byl, kdyby existoval nějaký parametr typu "dontWaitForResponseAndContinueLoadingPage", který bych vložil ke vkládanému javascriptu :)
Saix
Profil
No ještě mě napadá řešení, ale bojím se, aby pak to pak vůbec všude fungovalo. Vložit na stránky místo pouhého odkazu na externí javascritpt i kus kódu. Konkrétně dodefinovat onLoad událost nad objektem window a v ní teprve dynamicky přilinkovat externí javascript.

Bude to ale fungovat vždy a ve "všech" browserech?

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:

0