Iframe výpis ext.css - jak na URL ? – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Iframe výpis ext.css - jak na URL ? – JavaScript, AJAX, jQuery – Fórum – Programujte.comIframe výpis ext.css - jak na URL ? – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Petroff0
Věrný člen
23. 9. 2007   #1
-
0
-

Adresu externího stylopisu získávám z document.styleSheets[0].href --> někdy absolutní, jindy relativní tvar (IE)
Relativní tvar (např. "./styly.css") je nutné spojit s BÁZÍ =adresa HTML =window.location

K sestavení jsem chtěl využít vlastností objektu location ale narazil jsem na nepochopitelné chování:

<html> <head> <title> Stránka s IFRAME </title> </head>

<body>
<iframe src=""></iframe>
<script>
var URL = window.location.href;

frames[0].location = URL; /* [#1] Vložím do obj. Location adresu HTML dokumentu*/

alert(URL);
alert(frames[0].location);
</script>
</body></html>

Nevíte proč ALERTy vypisují odlišné hodnoty <-> jako kdyby příkaz [#1] nefungoval ?

Nahlásit jako SPAM
IP: ...–
Reklama
Reklama
Prog.0
Věrný člen
25. 9. 2007   #2
-
0
-

Musíš mu proste dať čas. keď povieš frames[0].location = URL, tak browser bude čakať na dobehnutie zvyšného javascriptu, t.j. tých alertov. Až potom začne načítať tú adresau a vracať očakávanú odpoveď. Skús to dať do timeout-u:

<html> <head> <title> Stránka s IFRAME </title> </head>

<body>
<iframe src=""></iframe>
<script>
var URL = window.location.href;

frames[0].location = URL; /* [#1] Vložím do obj. Location adresu HTML dokumentu*/

alert(URL);
setTimeout(function(){ alert(frames[0].location) },100);
</script>
</body></html>

Nahlásit jako SPAM
IP: ...–
Prog.
Petroff0
Věrný člen
25. 9. 2007   #3
-
0
-

Máš pravdu, teď jsem to zrovna zjistil.
Byl jsem inspirován tou časovací nádherou, sestavil jsem takový modul
(mimochodem - hodil by se do toho tvého objektu s komfortními metodami.
Tady je moje testovací stránka:

<html><head><meta http-equiv="content-type" content="text/html; charset=charset=utf-8" /></head>

<html>
<head> <title> Stránka s IRAME </title> </head>
<body>
<iframe src=""></iframe>

<a href="javascript:alert('After change iframe src \n iW.location=' +iW.location)"> ukaz adresu v iframe </a>
<a href="javascript:alert(' ZRUŠIT => GOOGLE '); window.location='http://www.google.com'"> KONEC - nahrej google </a>

<h6 id="output"></h6>
<script>
function add(s){document.getElementById("output").innerHTML+=s+""}

function zpracuj(pauza,list,update){ /*
var akce=list.shift(); var activity=true;
if (typeof(akce)=="string") eval(akce); else
if (typeof(akce)=="function") akce(); else
if (typeof(akce)=="number") {
activity=akce>0; if(akce=(akce-activity?1:-1)) list.unshift(akce);
}
if (typeof(akce)=="boolean") if (!akce) list.unshift(akce);
if(activity) if (typeof(update)=="string") eval(update); else
update();
if (list!=[]) setTimeout(function(){zpracuj(pauza,list,update)},pauza);
}
var
iW = frames[0],
URL= URL3 = window.location.href, /* vnořené rámy v rámech v rámech... => zdroj dalších problémů */
URL2 = 'http://www.google.com/support', /* cizí lokace => browser odmítne přístup k iW.location */
URL1 = 'file://localhost/C:/jsexam/blank.html'; /* malý dokument ze stejné (local) složky; synchronizace v čase < 1ms */


zpracuj(1,["add('EXECUTE: iW.location='+URL+'<hr />');iW.location=URL",15,
"if (confirm(' ZRUŠIT STRÁNKU => GOOGLE ')) window.location='http://www.google.com'"],"add('FRAME/LOCATION:'+iW.location)");
</script>
</body>
</html>

Podle toho jak test dopadne se dají URLs vkládané do location rámu rozdělit do 3 skupin = přístupné, nepřístupné a můj případ=url vlastní stránky.
Jedině Opera to stopne, ostatní rekursivně v rámech pokračují - nevím po kolikátou úroveň - asi furt dál. Já na to zapomněl, a časovací funkce, nastavená na 15 procesů á 1ms, se po pár řádcích zpomalila až jsem marně čekal na další řádek. Ještě že jsem prozíravě umístil na stránku odkaz s googlem, který zůstavá funkční (na rozdíl od čehokoliv ve Firefoxu = VŠECH 5 OKEN NEODPOVÍDÁ).
Výsledek:
1.step = about:blank
2.,3.,..step = file://localhost/C:/jsexam/tst.html
Takže asi 1ms u téhle prťavé stránky (u větší to bude víc, že ?)
Stejně tento způsob nemůžu použít - jednak rekurse a hlavně objekt Location má pouze pathname - dál to nedělí (jako to má aplikační JS na windows u souborového objektu)

VYŘEŠENO PŘES REG.EXP.

function FCss(){
var src = document.styleSheets[0].href;
if (!/\/\//.test(src)){src=window.location.href.replace(/[^/]+$/,"")+src.replace(/^\.?\//,""); }
if (/MSIE/.test(navigator.userAgent)) window.location=src;
else {
iFfoot.style.display="none";
iFview.style.display="block";
iFview.style.height=document.body.clientHeight+"px";
iFwin.location=src; }
document.body.scrollTop=document.body.scrollHeight-document.body.clientHeight;
window.scrollTo(0,document.body.scrollHeight-document.body.clientHeight);
}


Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý