Autor Zpráva
stoam
Profil *
Ahojte,

potřebuju vytvořit stránku s jednoduchým formulářem, na jehož vstup bude stránka hned reagovat. Do pole ve formuláři se má vložit URL webu, který se po stisknutí tlačítka zobrazí pod formulářem a tento formulář bude nad právě zobrazenou stránkou opět připraven k použití. Vytvořit statický náhled webu samozřejmě není problém, ale jak propojit toto zobrazování s formulářem, to už je mi záhadou. Jsem začátečník, tuto strukturu chci použít pro soukromé účely.

Budu vděčný za pomoc Vás zkušenějších.

Stoam
Darker
Profil
Pokud jsem to dobře pochopil, chceš data obnovit bez znovunačítání stránky.
Jestliže máš na serveru skript, který generuje obrázky na základě parametru GET (screenshot.php?url=www.example.com), lze toho dosáhnout tak, že budeš javascriptem měnit zdrojovou adresu (src) obrázku pod formulářem.
<form onsubmit="document.getElementById('obr').src='http://127.0.0.1/screenshot.php?url='+this.url.value;this.url.disabled='disabled';return false" id="form1" target="_blank">
<input type="text" name="url">
</form>
<img id="obr" src="about:blank" onload="document.getElementById('form1').url.value='';document.getElementById('form1').url.disabled=null;">
Ve skriptu nahoře se během načítání obrázku vstupní pole zablokuje do doby načtení obrázku. Pokud php skript vrátí chybná data pole se zablokuje do stisku F (Ctrl+F5). To by se dalo vyřešit timeoutem, skript by byl ale už moc dlouhý pro inline zápis.
Taky jsem pominul escapování adresy. To si tam dodělej, nepamatuju se na název té funkce.

Pokud ale obrázek taháš přes POST budeš muset použít AJAX. Ale to je zase jiná pohádka.
stoam
Profil *
Ahoj,

jak už jsem řekl, jsem začátečník - v HTML. Ale kód, který jsem se pokusil popsat, potřebuju, ať už jsem začátečník nebo profík. Pokusím se ho tedy popsat trochu podrobněji. Nevím, jak dělat screeny pomocí skriptů.

Kód celé stránky, kterou vytvářím, by měl být převážně v klasickém HTML. Ovšem nebráním se ani pasážím z obtížnějších jazyků. Nahoře by mělo být editační textové pole a vedle něj "submit" tlačítko. Po stisknutí tlačítka by si stránka měla čistě vytáhnout zadanou URL z textového pole a následně zobrazit webovou stránku, na kterou ukazuje URL, pomocí jakéhokoliv tagu (třeba iframe) pod tímto drobounkým formulářem. Jestli to je s refreshem nebo bez, to je mi jedno. Preferuju ale zobrazení ve stávajícím okně a panelu.

Děkuji za Vaši ochotu mi poradit. Doufám, že můj požadavek na takový kód není technicky nemožný. :)

Stoam
Darker
Profil
stoam:
Vytvořit statický náhled webu samozřejmě není problém
Nevím, jak dělat screeny pomocí skriptů.
...?
(třeba iframe)
Vyměň v mém kódu tag IMG za IFRAME a uprav přiřazování adresy na ř.1 (...src=). Rád bych tě upozornil, že stránka načítaná v IFRAME může přesměrovat stránku nad ní - tedy tvůj výtvor.
Na tomhle zkončila moje snaha udělat prohlížeč v prohlížeči jen javascriptem. Ale to už je dávno.
stoam
Profil *
Prohlížeč v prohlížeči dělat nechci. Aby byl pochopen účel mého snažení, řeknu na rovinu, o co mi jde. Bude to tak pro obě strany nejlepší. Ale popořádku.

Kód, jak jsi ho napsal, už bez problému s "iframe" funguje. Objevil se nový problém - a zde už popíšu, co mám vlastně za lubem. Snažím se získat univerzální stránku, která se sama po minutě obnovuje. Protože jsem člověk pohodlný a lenivý, nechce se mi každou chviličku aktualizovat stránku ručně. Chci si vždycky jenom otevřít příslušnou záložku a mrknout se na aktuální stav věcí na některých stránkách, která nabízí aktualizovaná data, ale neaktualizují se automaticky samy. Tak si chci vytvořit rámec, do kterého se promítne webovka ze zadané adresy. Když si ale nechám aktualizovat stránku pomocí

<meta Http-equiv="refresh" Content="60; Url=">

tak z rámce zmizí webová stránka, která byla zadaná do textového pole. Což je nežádoucí. Takže se chci navrch k tomuto tématu ještě zeptat, jestli by nešlo ještě něco udělat s tímhle. Možná je řešení jednoduché a já už přemýšlím moc složitě. Možná se zdám jako absolutně ztracený případ a přitom jsem jen nezkušený a lehce zmatený z tolika nových příkazů, které jsem nikdy neviděl. Ale byl bych rád, kdyby se mi tento problém podařilo vyřešit, protože by mi ušetřil spoustu času.

Stoam


Uvedu pro ještě větší srozumitelnost příklad.

Chci třeba sledovat toto téma a nastavím si čas aktualizace pomocí tagu "meta" na deset minut (tedy 600 sekund). Dále napíšu kód formuláře, odkud budu tahat submitem URL. Pak už jen nastavím "iframe", který bude zobrazovat obsah stránky ze zadané URL. Zjistil jsem ale, že po automatické "meta-aktualizaci" mi stránka ze zadané URL zmizí ("iframe" je prázdný) a já ji musím zadávat znova. Já ovšem chci, aby se stránka aktualizovala i se stránkou z naposledy zadané URL, dokud nezadám jinou adresu. Existuje možnost, jak vyřešit tento háček?

Stoam
Darker
Profil
stoam:
<meta Http-equiv="refresh" Content="60; Url=">
Vrtá mi hlavou, kam to cpeš... Do HTML načítaného webu zasahovat nemůžeš.

Takže se chci navrch k tomuto tématu ještě zeptat, jestli by nešlo ještě něco udělat s tímhle.
Musíš obnovovat ten rámec. Například pomocí funkce setTimeout/setInterval.

var adresa = "";  //Globální proměnná - aby nehrozilo, že se bude načítat více různých adres přes sebe.
function zacni(input) {
  if(input.tagName!=null) {    //Pokud je funkce volaná z formuláře, bude první parametr element INPUT
    input.disabled = "disabled";
    window.adresa=input.value;
  }
  document.getElementById('obr').onload = function() {   //Tato funkce se spusí po načtení stránky do iframe
    setTimeout(function() {zacni(window.adresa);},60000);   //časování funkce která opět spustí tuto funkci /rekurze/
  };
  document.getElementById('obr').src=window.adresa;  //Změna adresy IFRAME - aby mohlo dojít ke spuštění ONLOAD
 } 
Zcela jsem vynechal něco jako tlačítko STOP! - až tě to omrzí, zavři záložku. Záměrně píšu window.adresa aby bylo jasné, že se jedná o globální proměnnou platnou po celé stránce.
<form onsubmit="zacni(this.url); return false">
stoam
Profil *
Paráda, funguje to. Díky moc!

Vzhledem k tomu, že o javascriptu vím jenom to, že existuje, nevidím konkrétní úlohu konkrétní části kódu. Ale věřím, že se dovzdělám a vyznám se v tom.

Moc jsi mi pomohl Darkere.
Darker
Profil
Dopsal jsem ke skriptu komentáře, snad to pomůže.
Hando
Profil
Omlouvám se za příspěvek mimo téma, ale stále mi uniká, proč na něco takového nevyužít zabudované funkce některých prohlížečů (100% vím, že to umí Opera), s názvem "načítat v intervalu"?

Pokud je cílem se prostřednictvím toho naučit něco nového, tak jasně, ale jinak mi to připadá dost složitý na tak prostou úlohu...
Darker
Profil
Hando:
některých
Protž umí jen některé. Kdyby napsal jaký prohlížeč má, určitě bych ho směroval tímto směrem. Pro firefox například existuje doplněk umožňující na určité adrese spouštět vlastní skripty. Pak by stačilo:
setTimeout(function() {window.location=window.location.href;},60*1000);

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0