Miten on mahdollista tuoda <title></title> -tagien väliin otsikko toisesta osoitteesta automaattisesti. Oli epäselvää... Siis jos minulla on ikkuna, jossa on kaksi framea eli erillistä verkkosivua, miten voin tuoda toisen framen osoitteen tälle kyseiselle "yhdistävälle" sivulle kun tätä framea selataan?
JavaScriptillä?
var frame_id = 0; document.title = window.frames [ frame_id ].document.title;
Tämä siis vaihtaa sivun titlen samaksi kuin sen framen, jonka id on tuossa muuttujassa. Id on siis järjestysnumero, alkaen nollasta.
Osoite on toinen juttu, mutta et tainnut tarkoittaa sitä?
Tarkotin juuri tuota, mutta... en onnistunut tuossa, laitoin tuon scripti-tagien väliin, jonka laitoin head-tagien väliin. Voisitko tehdä esimerkin kokonaisesta sivusta, jossa on kaksi framea ja otsikko tulee toisesta niistä. Olisin kiitollinen :)
Laita koodi vasta kaiken sisällön jälkeen, jolloin kaikki elementit kuten kyseinen frame ja sen title on luotu ja olemassa. Jos teet koodia paikkaan ennen sivun sisältöä, se ei voi käsitellä sisällön elementtejä, koska niitä ei ole vielä olemassa. Sijoita koodi vaikka bodyn loppuun.
Vaihtoehtoisesti: Yleensä on myös hyvä tarkistaa, että dokumentti on latautunut ennen kuin skripti suoritetaan. Tällöin sinun tulisi sijoittaa tai linkittää koodi juuri sinne headiin. Laita koodi funktioon, jota kutsut, kun frameset-elementti on kokonaan latautunut.
function title_framesta ( frame_id ) { document.title = window.frames [ frame_id ].document.title; }
Ja HTML:ssä
<frameset cols="50%,50%" onload="title_framesta (0);"> <frame src="eka-sivu.html" /> <frame src="toka-sivu.html" /> </frameset>
Edit. korjasin virheen, unohdin, että framesettiä ei laiteta bodyn sisään :D
Nyt kun ei ole enää kiire niin voinhan heittää pyytämäsi kokonaisen sivun :D
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Väliaikainen otsikko</title> <script type="text/javascript"> function title_framesta ( frame_id ) { document.title = window.frames [ frame_id ].document.title; } </script> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <frameset cols="20%,80%" onload="title_framesta (0);"> <frame src="eka-sivu.html" /> <frame src="toka-sivu.html" /> </frameset> </html>
Huomaa, että tämä ei toimi, jos se sivu, josta otsikko olisi saatava on toisella domainilla. Selain estää pääsyn ulkoisen sivun olioihin ja elementteihin JavaScriptiltä.
Olettaen, että kaikki sivut ovat samassa kansiossa, ja HTML-merkinnät on kunnossa näillä sivuilla, niin lopputulos näyttää jokseenkin tältä. (Molemmilla sivuilla yksi rivi tekstiä ja otsikot "Ekasivu" ja "Tokasivu" ja framejen leveydet 20%,80%)
Jos haluat hakea titlen toisella domainilla olevalta sivulta, täytyy sinun käyttää PHP-kieltä (tarvitset palvelinohjelmiston).
Jos sivut ovat samalla sivustolla, tuollainen JS-koodi toki toimii. Jotta muutos tapahtuisi, kun framessa klikataan linkkiä, koodi pitää ajaa toistuvasti (setInterval) tai laittaa jokaiselle frameen tulevalle sivulle (tietenkin sopivasti muutettuna, window.parent.document.title = document.title).
Jos sivut ovat eri sivustoilla, nämä tavat eivät toimi vaan tulee virheilmoitus. Näin estetään sivustojen keskinäistä vakoilua, joten vain pääsivulle tehtävää ratkaisua ei pitäisi olla olemassakaan. Mahdolliset ratkaisut vaativat siis erityistä yhteistyötä sivustojen osalta, esimerkiksi funktiota window.postMessage tiedon lähettämiseen.
Moi Haraldinho!
oheinen viritelmä wörkkii IE:llä, paitsi freimissä selattaessa...
<!-- index.html --> <!DOCTYPE html> <html> <head> <title>main page</title> <style type="text/css"> #frame1 { border:1px solid black; } #frame2 { border:1px solid black; } </style> <script src="http://code.jquery.com/jquery-latest.js"></script> <script language="javascript"> var maintitle; $(function () { $('#frame1').focus(function(){ document.getElementById("frame1").style.border="3px solid red"; var floc = document.getElementById("frame1").src; var wloc = document.location.href; if(floc.substring(0, floc.lastIndexOf('/') + 1) != wloc.substring(0, wloc.lastIndexOf('/') + 1)) { makeRequest(floc); } else { document.title = frames[0].document.title; } }).blur(function(){ document.getElementById("frame1").style.border="1px solid black"; document.title = maintitle; }); $('#frame2').focus(function(){ document.getElementById("frame2").style.border="3px solid red"; var floc = document.getElementById("frame2").src; var wloc = document.location.href; if(floc.substring(0, floc.lastIndexOf('/') + 1) != wloc.substring(0, wloc.lastIndexOf('/') + 1)) { makeRequest(floc); } else { document.title = frames[1].document.title; } }).blur(function(){ document.getElementById("frame2").style.border="1px solid black"; document.title = maintitle; }); }); window.onload = function() { maintitle=document.title; } var http_request; function makeRequest(url) { http_request = false; if (window.XMLHttpRequest) { http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Cannot create XMLHTTP instance'); return false; } http_request.onreadystatechange = getTitle; http_request.open('GET', url, false); http_request.send(null); } function getTitle() { if (http_request.readyState == 4) { if (http_request.status == 200) { var title = http_request.responseText.split("<title>"); if(title.length > 1) { title=title[1].split("</title>"); if(title.length > 0) { document.title = title[0]; } } } } } </script> </head> <frameset cols="50%,50%"> <frame src="https://www.ohjelmointiputka.net/index.php" id="frame1"> <frame src="testi_frame.html" id="frame2"> </frameset> </html>
<!-- testi_frame.html --> <!DOCTYPE html> <html> <head> <title>testiframe (2)</title> </head> <body> <img src="http://www.harley-davidson.com/en_US/Media/images/2013-Motorcycles/v-rod/night-rod-special/gallery/large/13-hd-night-rod-special-bs.jpg"/> </body> </html>
neau33 kirjoitti:
-Nean koodi -
wow.
Aihe on jo aika vanha, joten et voi enää vastata siihen.