06. juli 2005 - 11:07Der er
6 kommentarer og 1 løsning
Tilføje clientside script fra HttpModule
Jeg sidder med et projekt hvor jeg fra et HttpModule ønsker, at sende et javascript med til klienten. Håber at det på en eller anden måde, kan lade sig gøre at få fat i et objekt af typen System.Web.UI.Page et sted i løbet af processen, så jeg kan køre en RegisterClientScript() og på den måde få mit script med.
Desværre kan jeg ikke selv se hvordan jeg skulle få fat i dette Page object, og har defor også overvejet selv at lokalisere </body> i response streamen, og indsætte mit script herover, men dette er bare væsentligt mere besværligt og usikkert synes jeg.
Nogen idéer til hvordan jeg kan fange et Page objekt, eller andre bud på hvordan jeg kan få mit script afleveret fra et HttpModule?
hvorfor skal det absolut foregår fra et httpmodule? - jeg ville nok foreslå dig at lave en baseklasse for de forms hvor det respektive script skal med ud.
Løsningen du skitserer ligner den jeg bruger i dag.
Årsagen til at jeg ønsker at tilføje scriptet fra et httpmodule, er at komponentet på den måde vil være enklere at installere i forskellige applikationer. Med et httpmodule vil jeg kunne nøjes med tilføje en linje i web.config, frem for at skulle ændre samtlige forms og recompile.
der er ingen grund til at du skulle ændre i samtlige forms.... hvad skulle årsagen være til det?
og .... jeg synes da ikke det er så fedt at et specifik clientscript smides ud på samtlige sider - men det er mere fordi jeg aldrig selv har haft en java-script der skulle bruges overalt.
du kan jo bare lægge dit script i en fil for sig, og lægge en nøgle i web.config der angiver om den skal ind eller ej. så kan du ændre scriptet som du har lyst til, og angive om det skal sættes ind eller ej uden at skulle rekompilere noget.... er det ikke det du vil?
men ... bortset fra det, så prøv noget i denne stil:
// init for dit module public void Init(HttpApplication application) { application.BeginRequest += (new EventHandler(this.Application_BeginRequest)); application.EndRequest += (new EventHandler(this.Application_EndRequest)); application.PreRequestHandlerExecute += new EventHandler(application_PreRequestHandlerExecute); }
og så handleren: private void application_PreRequestHandlerExecute(object sender, EventArgs e) { Page page = ((HttpApplication)sender).Context.Handler as Page; if(page != null) { page.RegisterStartupScript("SomeScript", Script); } }
Script er jo så bare dit script ... du kan jo prøve det af med sådan en her: private string Script = @"<script language=""javascript"">alert('test');</script>"; mvh
Haps - det var lige det jeg søgte: ((HttpApplication)sender).Context.Handler as Page
Baggrund for problemstillingen: Jeg arbejder på et statistikmodul, der let skal kunne implementeres i forskellige sites. I forbindelse med indsamlingen af oplysninger om klienternes skærmopløsning etc., har det vist sig praktisk at smide et par linjers javascript ind. Med din hjælp kan jeg levere dette script fra det HttpModule som alligevel foretager serverside logging, genererer cookies etc. Installationen af modulet omfatter således blot en registrering af et httpmodule, samt tilføjelse af en dll til bin-mappen.
Håber dette hjalp til forståelsen af hvorfor jeg ønskede denne løsning.
jamen den er bare i vinkel. vi skrives ved :o) mvh
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.