Koka lite te och sätt er tillrätta.
Tinwëlint: Tack för den kommentaren! Tänkte precis på det du sade när jag satt och åt, och funderade på om jag inte skulle gå tillbaka och säga att någon måste börja med den nya tekniken ;).
Zcorpan: Tack för lösningen. Jag har ett inlägg i XML också - där jarvklo också gav den lösningen! Vet ni två (och alla andra) om <?xml-stylesheet fungerar i IE (ska kolla snart)?
Jarvklo: Samma som ovan; tack för lösningen. Jag ska genast kolla om det fungerar i IE också. Visste inte att man kunde skriva på det sättet här i forumet, hehe. Något att tänka på... Vet du förresten varför min hyperlänk inte fungerade? (Firefox sade ju "not well formed")
Sen, också, jarvklo... Du säger att jag ska ha med en <?xml version ---?>
Men det är så att jag skickar med lite av den informationen i headern:
<%@ Page Language="C#"
ContentType="application/xhtml+xml"
ResponseEncoding="iso-8859-1" Inherits="Normal"
Src="Default.cs" %>
och om jag lägger till
<?xml version="1.0" encoding="iso-8859-1"?>
i början får jag det felet som jag har bifogat!
Alltså fungerar det inte riktigt då.
Testade precis med <?xml-stylesheet i Firefox. Fungerar.
Det fungerar inte i Internet Explorer.
(nu får jag hoppas att min session inte tar slut [expires] så jag måste skriva om allt det här :))
@nders: Eftersom min lösning, eller snarare hela det här problemet handlar om ASP .Net med C#, XML, XHTML, CSS och validatorer så tyckte jag att den kunde passa i olika forum. Och om jag ska vara ärlig så trodde inte jag att jag skulle få så många svar i XML forumet med tankte på hur många inlägg det finns där. I alla fall så har det löst sig nu ;) (förutom min länk som har variabler i sig) -- så alla är väl glada? :)
Okej...
Här är då min lösning. Om jag börjar med att visa hur jag fick med mina style sheets.
<style type="text/css" id="loadExternal">
@import url(styles/1.css) all;
@import url(styles/1-print.css) print;
</style>
fungerar inte i IE. Alltså går inte det.
Fick skriva både ovanstående och
<link href="styles/1.css"type="text/css" rel="stylesheet" />
för att få det att fungera i IE.
Nu är min CSS inkluderad. Mitt dokument validerar (hrrm, m_soderlund ;)) och mozilla och opera visar den. Problemet är fortfarande IE.
Så... Allt hänger alltså på vilka doctypes som webbläsarna accepterar. Dessa kan fås genom:
string httpAccept = Request.ServerVariables["HTTP_ACCEPT"];
i asp och asp.net. Vi måste ju skicka olika headers till olika webbläsare.
Läste den här artikeln:
http://www.456bereastreet.com/archive/200501/the_perils_of_using_xhtml_properly/
men han använder PHP till att fixa det. Så jag började googla.
Hittade dessa:
http://www.aspnetresources.com/blog/aspnet_xhtml_content_types.aspx
och även (inte lika bra cache hantering, som jag självklart vill ha)
http://charlvn.blogspot.com/2004/07/simple-aspnet-content-negotiation-for.html#previous
Men jag visste inte vad en http-modul var för något.
Gissade först att den lades i Global.asax, men det stämmer ju inte. För det första ska de registreras i web.config: (skickar hela min egna web.config som även använder Server.Encode() på rätt språk --> svenska)
<configuration>
<system.web>
<customErrors mode="RemoteOnly"/>
<globalization fileEncoding="iso-8859-1"
requestEncoding="iso-8859-1"
responseEncoding="iso-8859-1" culture="sv-SE"
uiCulture="sv-SE" />
<httpModules>
<add name="ContentType" type="ContentType, ContentType" />
</httpModules>
</system.web>
</configuration>
Min modul heter alltså ContentType, och är nu registrerad. Används varje gång en sida hämtas.
Men vi måste ha koden till modulen också:
using System;
using System.Web;
using System.Collections;
public class ContentType : IHttpModule
{
public void Init(System.Web.HttpApplication application)
{
application.PreSendRequestHeaders +=
new EventHandler(this.Application_PreSendRequestHeaders);
}
private void Application_PreSendRequestHeaders (object sender, System.EventArgs e)
{
HttpApplication app = ((HttpApplication)(sender));
HttpContext context = app.Context;
if (context.Request.Browser.Browser.ToUpper ().IndexOf("IE")==-1)
context.Response.ContentType = "application/xhtml+xml";
else context.Response.ContentType = "text/html";
}
public void Dispose() {}
}
och jag hoppas att ni kan C#, annars är det kopiera och klistra in som gäller. Spara som ContentType.cs
Sen går du inte i kommandoprompten och lägger dig i din applikations root och skriver:
csc /t:library /out:D:\mapp\applikationsRoot\bin\ContentType.dll
/r:System.Web.dll /r:System.dll
/recurse:ContentType.cs
Du har nu en dll fil i din bin-katalog. ASP .Net söker efter den filen i och med att du har angett ContentType som HttpModule i din web.config fil.
Nu kommer alla webbläsare som inte inte hittar IE i sin webbläsarsträng att få application/xhtml+xml serverat.
(Jag ska fixa så att man använder Request.ServerVariables["HTTP_ACCEPT"]; istället för att inte stänga ute googlebot och andra gamla (t.ex. netscape < 6) och så)
Sen ska det förhoppningsvis fungera i både IE och Firefox!
Vad tycks ;)?
EDIT:
IE verkar inte klara när man har <?xml-stylesheet ... i början av sidan, utan visar ENBART vissa delar (inte alla) av style sheetet. Så jag var tvungen, nu, att plocka bort xml-stylesheet from början och från <style> elementet, och enbart ha det i en <link ...> för att IE ska visa det som det är tänkt (Firefox och Opera klarar det bra ändå). Och det är ju faktiskt inte så stor uppoffring i och med att <link> också validerar.
EDIT 2:
Nu är hela sidan uppdaterad på internet också! Kolla gärna lite på den om ni inte redan har gjort det. Ni kan kolla koden också om ni vill.
EDIT 3:
Kom på att jag var tvungen att skriva:
body {
background:#000 url(../images/layout/shadow.png) left top repeat-y;
margin: 0px;
padding: 0px;
/* In order to make application/xhtml+xml work properly */
position: absolute;
top: 0px;
width: 100%;
min-height: 100%
/*End xhtml thingy */
}
för att få det att fungera med bakgrundsbilden.