webForumDet fria alternativet

XHTML + JavaScript +CSS

33 svar · 1 363 visningar · startad av ptr_lks

ptr_lksMedlem sedan juni 2005588 inlägg
#1

Hej,
läste just att man inte rekomenderas att använda sk inline JavaScript och CSS i XHTML 1.0..
Stämmer detta?
Och gäller det även transitional?

webbebbaMedlem sedan juni 200593 inlägg
#2

När man kodar på standardvis dvs följer webbstandard så gäller det att separera funktionalitet från struktur och presentation. Då är det enda javaskript man ska behöva se i ett HTML-dokument är detta:

<script type="text/javascript" src="scripts.js"></script>

J.N.Medlem sedan apr. 20031 660 inlägg
#3

HEJ!

Hänger på en fråga här, detta gäller väl css också, dvs stilar ska ligga externt, inte i taggarna, tex <td style:"något";>.

(X)HTML för sig, css och javascript likaså alltså?

MeleaMedlem sedan juli 20032 667 inlägg
#4

I praktiken och när du validerar spelar det ingen roll om det ligger i style="" eller klasser/id.
Samma med javascript, du kan lika gärna skriva det i klartext

<script type="text/javascript">

   // kod här

</script>

Däremot kan det vara bra att separera den här koden från dokumentet för att få en bättre överblick, samt att det blir enklare att ändra strukturen/designen.
Du slipper alltså ha samma uppsättning kod i flera filer.

jarvkloMedlem sedan juli 20013 295 inlägg
#5

Hmm...
Det man får vara noga med när man pratar XHTML är att inte använda tecknen "<" eller "&" i Javascriptkoden eftersom dessa har speciell betydelse i XHTML (via grundkrav som ställs på alla XML-dokument).

... Vilket väl egentligen är orsaken till rådet att bara använda externa Javascriptfiler om men kör XHTML (separeringen av beteenden som webbebba nämner är iofs ett bra skäl, men kanske inte det mest akuta ;) )

... och ja, det gäller även 1.0 Transitional

... det där med kommentarstecknen <!-- och --> i <script> och <style> är inte garanterat att fungera när man serverar sin XHTML enligt konstens alla regler (dvs "som XML") eftersom kommentarer i XML-kod inte garanterat hamnar i den inlästa kodens interna representation ("DOM-trädet") - och därför gör det att det inte är rekommendabelt att ha med dem i "bakåtkompatibel XHTML" (XHTML serverad "som HTML") heller.

- typ

Att det sedan funkar "i praktiken" när man skickar XHTML som HTML är det ingen diskussion om, men då bryter man s.a.s. ganska lätt sönder just XHTML-aspekten av HTML, och då har man enligt min enkla mening valt bort en av grundorsakerna till att använda XHTML till att börja med (nämligen den att man skall kunna hantera sin kod med XML-verktyg om man behöver)

Red: Ack ja - jag tror nog de flesta förstår vad jag menar ändå :OO

zcorpanMedlem sedan dec. 20042 269 inlägg
#6

jarvklo skrev:

... och ja, samma sak gäller CSS, iallafall om man vill använda selektorn >

Nix pix. :) ">" är välformad XML.

Vill man använda "<" eller "&" i SCRIPT eller STYLE i XHTML som text/html kan man göra såhär:

<style type="text/css">
/*<![CDATA[*/

/*]]>*/
</style>
<script type="text/javascript">
//<![CDATA[

//]]>
</script>

:bire

oskobMedlem sedan maj 20021 513 inlägg
#7

Vad gör CDATA för något?

jarvkloMedlem sedan juli 20013 295 inlägg
#8

Den talar om för en XML-tolk att det som följer är "character data" och ger som följd att allt mellan <![CDATA[ och ]]> (som inte är en del av just strängen "]]>") även får innehålla tecken som annars skulle ha haft speciell betydelse (som t.ex. "<" och "&") i löptext.

Mellan <![CDATA[ och ]]> tolkas alltså inte <b>fet</b> som elementet <b> med innehåll "f", "e" och "t" utan som teckensekvensen "<", "b", ">", "f", "e", "t", "<", "/" "b" och ">" (och det är en rejäl skillnad det i XML ;) )

... Men det där behöver man inte tänka på om man kör med externa Javascript- och CSS-filer - vilket naturligtvis är en bidragande orsak att så många rekommenderar folk att separera sin kod :)

Exemplet som Simon visar upp kommenterar alltså bort <![CDATA[ med respektive språks egna kommentarer för att inte Javascript- respektive CSS-tolken i webbläsaren skall få för sig att tolka dem som kod - samtidigt som de kommer att kunna läsas "som det var tänkt" av en XML-tolk och därigenom tillåta t.ex. "<" i en Javascriptjämförelse. (jfr hur man använder "//-->" som avslutare om man kör kommentarsteckeninramad Javascriptkod - det är samma princip, i princip :)

Källa för <!CDATA[: http://www.xml.se/xml/REC-xml-sv/#dt-cdsection

paddanMedlem sedan dec. 2002323 inlägg
#9

Glöm inte <noscript>bla bla</noscript>

ptr_lksMedlem sedan juni 2005588 inlägg
#10

webbebba skrev:

När man kodar på standardvis dvs följer webbstandard så gäller det att separera funktionalitet från struktur och presentation. Då är det enda javaskript man ska behöva se i ett HTML-dokument är detta:

<script type="text/javascript" src="scripts.js"></script>

Är detta rätt :q

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Titel</title>
<link href="p93.css" rel="stylesheet" type="text/css" />
[B]<script type="text/javascript" src="popup.js"></script>[/B]
</head>
[HTML]<a href="javascript:popUp(2)">text</a>[/HTML]
J.N.Medlem sedan apr. 20031 660 inlägg
#11

HEJ!

För att göra koden enklare bör ändra dina funktioner till att vara endast en, och sedan skickar de variabler (fönsterbredd/-höjd, olika egenskaper (meny, statusrad, scroll etc)) du behöver i funktionsanropet.

En sådan funktion kan göras på x antal sätt, ett gott urval finns i javascript-forumet.

ptr_lksMedlem sedan juni 2005588 inlägg
#12

J.N. skrev:

HEJ!

För att göra koden enklare bör ändra dina funktioner till att vara endast en, och sedan skickar de variabler (fönsterbredd/-höjd, olika egenskaper (meny, statusrad, scroll etc)) du behöver i funktionsanropet.

En sådan funktion kan göras på x antal sätt, ett gott urval finns i javascript-forumet.

oki... skall söka... MEN måste erkänna att jag inte riktigt förstår vad du menar :q

ptr_lksMedlem sedan juni 2005588 inlägg
#13

ptr_lks skrev:

oki... skall söka... MEN måste erkänna att jag inte riktigt förstår vad du menar :q

Så jag är tacksam för lite mer hjälp...

InsiderMedlem sedan jan. 20001 003 inlägg
#14

ptr_lks skrev:

Är detta rätt :q

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Titel</title>
<link href="p93.css" rel="stylesheet" type="text/css" />
[B]<script type="text/javascript" src="popup.js"></script>[/B]
</head>
<a href="javascript:popUp(2)">text</a>

Som webbebba skrev; den enda javascript kod man ska behöva se är <script> elementet. I ditt exempel har du skriptkod även i <a href- attributet.
Här är ett inlägg som visar ett exempel på hur man kan göra:
http://www.webforum.nu/showthread.php?t=117902

J.N.Medlem sedan apr. 20031 660 inlägg
#15

HEJ!

J.N. skrev:

...
En sådan funktion kan göras på x antal sätt, ett gott urval finns i javascript-forumet.

Det jag menar är att du använder något liknande detta.

function cw(sida,sidnamn,settings,w,h){
	//funktion för att centrera fönster. J.N. 7/5-02
	var xMax = screen.width;
	var yMax = screen.height;
	var xOffset = (xMax - w)/2
	var yOffset = (yMax - h)/2;
	var oppna = window.open(sida,sidnamn,settings + ',width=' + w +',height=' + h +',top='+yOffset+',left='+xOffset+'');
	
	//tillagt 3/9-02: kontrollera om focusfunctionen finns, sätt då focus på fönstret
	//tillagt 21/10-05: oppna &&, så de med popupblockerare slipper felmeddelanden, enligt wF Peter S.
	if(oppna && oppna.window.focus){
		oppna.window.focus();
	}
}

Du skickar med features i klartext; de du vill använda sätter du till yes, scrollbars=yes. http://www.devguru.com/Technologies/ecmascript/quickref/win_open.html

Kalla på funktionen med

<a href="javascript:cw('sida.htm','namn','menubar=yes,resizable=yes','600','450')">klick!</a>

Har märkt att centreringen inte kan kallas detsamma i Opera, har inte lagt tid på att lösa det, få användare och det fungerar ändå.

zcorpanMedlem sedan dec. 20042 269 inlägg
#16

J.N. skrev:

Kalla på funktionen med

<a href="javascript:cw('sida.htm','namn','menubar=yes,resizable=yes','600','450')">klick!</a>

Fast nu blandar vi ju in javascript i märkkoden ändå, och länken fungerar inte för användare utan javascript.

Länken borde se ut ungefär såhär:

<a href="sida.htm">test</a>

Sedan hur länken ska bete sig skriver man i den externa skriptfilen...

J.N.Medlem sedan apr. 20031 660 inlägg
#17

HEJ!

zcorpan skrev:

Fast nu blandar vi ju in javascript i märkkoden ändå, och länken fungerar inte för användare utan javascript.
...

Korrekt, jag tänkte inte på att jag i den snutten jag kopierade inte är den som jag använder nuförtiden. Denna fungerar utan javascript.

<a href="sida.htm" onClick="cw('sida.htm','namn','menubar=yes,resizable=yes','600','450'); return false;">

J.N. skrev:

Det jag menar är att du använder något liknande detta.

OM man läser väldigt noga mellan raderna skönjer man att jag menar "vi kommer in på en javascript-fråga". Det hade underlättat för er om jag skrivit det också! :r

zcorpanMedlem sedan dec. 20042 269 inlägg
#18

Det löste bara det ena "problemet", det finns fortfarande javascript inblandat i märkkoden. :)

För att lägga händelsehanteraren i den externa skriptfilen kan man göra till exempel såhär:

document.addEventListener("click", pop, false);
function pop(e) {
  var elm = e.target;
  if (elm.className == "pop" && elm.href) {
    return !window.open(elm.href);
  }
}
<a href="sida.htm" class="pop">test</a>
liljaMedlem sedan juli 20041 219 inlägg
#19

Funkar den där i alla webbläsare? I sådana fall är det precis vad jag väntade på :)

zcorpanMedlem sedan dec. 20042 269 inlägg
#20

Definiera "funkar" och "alla"... ;)

Det går att följa länken i de webbläsare som kan följa länkar, däremot öppnas länken i ett nytt fönster bara i de webbläsare som även förstår skriptet. Om jag inte minns fel har äldre versioner av Safari en bugg där e.target kan retunera ett textNode (istället för en elementNode), samt IE6 behöver ett aningen modifierat skript med attachEvent och e.srcElement eller så.

if (document.addEventListener) {
  document.addEventListener("click", pop, false);
} else if (document.attachEvent) { //msie
  document.attachEvent("onclick", pop);
}
function pop(e) {
  var elm;
  if (e.target) {
    elm = e.target;
  } else if (e.srcElement) { //msie
    elm = e.srcElement;
  }
  while (elm.nodeName != "A") {
    elm = elm.parentNode;
  }
  if (elm.className == "pop" && elm.href) {
    return !window.open(elm.href);
  }
  return true;
}
Genererad på 372 ms · cache AV · v20260730165559-full.f96bc7eb