Nyheter i IE 8: XDomainRequest

Det är nog ingen som har missat att Internet Explorer 8 släpptes i förrgår, men det är däremot inte alla som vet vilka nyheter som finns för utvecklare, utöver den nya sökningen, web slices och acceleratorer. En av dessa nyheter är XDomainRequest som gör det möjligt att med javascript köra anrop mot andra servrar.

Det är dock ej möjligt att göra anrop mot vilken sida som helst, utan en HTTP-header måste sättas på den sidan som anropas, av säkerhetsskäl.

Till att börja med så skall jag använda en handler som skall anropas från javascriptet.

<%@ WebHandler Language="C#" Class="XDR" %>
using System.Web;
 
public class XDR : IHttpHandler
{
 
    public void ProcessRequest(HttpContext context)
    {
        context.Response.AddHeader("Access-Control-Allow-Origin", "*");
        context.Response.ContentType = "text/plain";
        context.Response.Write("Hello, XDR!");
    }
 
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

Det här är en helt vanlig webhandler, med undantaget att vi skickar med en extra header med namn “Access-Control-Allow-Origin”. Värdet för denna är i exemplet “*”, vilket betyder att anropet skall kunna göras från vilken domän som helst. Vill vi begränsa oss till t.ex. enbart vår egen domän så kan vi skriva in den där istället.

För att se hur det ser ut så kan ni klicka här. Jag har lagt upp sidan publikt för att ni enkelt skall kunna göra tester mot den själva.

För att nu kunna anropa filen så skall vi skapa upp ett XDomainRequest-objekt med javascript.

if (window.XDomainRequest) {
    //Skapa XDomainRequest-objektet
    var xdr = new XDomainRequest();
    
    //Hantera events
    xdr.onerror = function() { alert('Ett fel uppstod') };
    xdr.onload = function() { alert(xdr.responseText) };
    
    //Anslut mot servern
    xdr.open("get", "http://dev.mikaelsoderstrom.se/scripts/asp.net/xdr.ashx");
    xdr.send();
    
}
else {
    alert('Din webbläsare har inte stöd för XDomainRequest!');
}

Det vi gör här är att först och främst se om webbläsaren har stöd för XDomainRequest, vilket är ett krav för att det öht skall gå att skapa anropet. Sedan skapas objektet och vi tar hand om två olika event, ett som sker om ett fel uppstår och ett som sker när anropet är slutfört.

Om vi nu kör den här koden rakt av i Internet Explorer 8 så bör vi få upp en alert-ruta med texten “Hello, XDR!”.

För att se så att kontrollen fungerar som väntat så kan vi testa att kommentera bort raden i handlern där vi sätter headern. Om vi gör det så kommer vi istället att få “Ett fel uppstod” då vi inte längre har rätt att anropa filen.

2 Comments

Comments have been disabled for this content.