Valamelyik nap azon okosság ütött szöget a fejembe, hogy vajon hogy tudok a postom tartalmába futó Silverlight alkalmazást belevarázsolni. Ha nagyon egyszerűen akarom megválaszolni, akkor így:
Ennyivel nem tudhatom le a dolgot, szóval nézzük meg rendesen, hogy miről is van szó tulajdonképpen. Sajnos nem mehetünk el a tény mellett, hogy még mindig beta (alfa refresh!) változatban van a Silverlight 1.1, ez sok kellemetlenséggel képes megajándékozni bennünket. Először is, amire szükségem van, hogy definiáljak egy DIV elemet az oldalban, ahova beilleszti majd magát a csoda
. Másodszor, némi javascript adalék is kell, rögtön kettő is: Silverlight.js, ami detektálja, hoyg rendelkezünk-e megfelelő installált verzióval, valamint elvégzi az XAML betöltését, illetve, egy második darabka, ami az előzőt ráveszi, hogy mindezt csinálja meg, és megmondja, hogy melyik XAML-el is kell dolgozni. A Silverlight.js adott, a legenerált solution része, már csak fel kell juttatni a szerverre (lásd később). Amit be kell ágyaznom a jelent post-ba, az a projektben TestPage.html-ben, és a hozzátartozó TestPage.html.js-ben találom meg. Kivágom, bemásolom, kicsit átszerkesztgetem benne az elérési utakat. Ezen kívül fel kell még erőltetnem a szerverre legalább két fájlt: egy XAML-t, amiből inicializálom a Silverlight felületet (ezt adom meg a javascript-ben is), és a hozzá tartozó logikát, lefordított dll formájában.
Itt jön be a képbe az a tény, hogy ehhez tudni kell, hogy a szerverre hogyan tudok feljuttatni fájlokat, illetve azok hol tárolódnak (szerencsére erről van némi infóm
).
Aztán, itt újra eszünkbe kell jusson, hogy jelen verziójában például csakis relatívan tudok hivatkozni az XAML-ben a hozzá tartozó dll-re, nincs más lehetőség, akármit írok oda, relatívan értelmezi (és ClientBin mappát sem tudok a szerveren létrehozni, szóval ezeket a statikus fájlokat testre kell szabnom a szervernek megfelelően). Később ez válzoni fog - legalábbis ezt ígérik - de most ez van, ennyivel kell alkotni.
Vagy például, ha nem akarok statikusan bedrótozni mindent, akkor most be kell érnem azzal, hogy a cross-domain hívás semmilyen tekintetben nem megy. Vagy meg tudom oldani a saját domainen belül az adat szolgátatását (bárhogy
), vagy statikus értékekkel dolgozok. Ez természetesen megkeseríti a fejlesztést is, mert általában a fejlesztői gépen minden megoldható
, és a környezet is épp tökéletes, (vagy ha nem, akkor azzá tudom tenni), viszont egy publikus blog szerverre nincs admin jogom (de most legalább első kézből vannak infóim
).
Szóval, fájlokat legegyszerűbben úgy tudom feltölteni, hogy jelen postomhoz csatolom mellékletként, így felekrülnek valahová, és arra az elérési útra alapozva írom meg a kódot. A postom tartalmát a megfelelő javascript injektáláshoz LiveWriter HTML code nézete segítségével készítettem el. Következő lépés lehetne, hogy LiveWriter plugint írjak Silverlight alkalmazás publikálásához, de ezt nem akarom elkapkodni
, így most hekkeltem inkább. Úgyis a végeredmény számít, legalábbis most biztosan
.
Ezzel a kis demóval sikerült megbizonyosodnom, hogy nem lehetetlen a dolog, de épp ugyanúgy nincs is rá biztosíték, hogy mindig mindenhol menne. Itt megy.