Avatar billede davidfossil Nybegynder
06. juli 2005 - 11:07 Der 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?
Avatar billede snepnet Nybegynder
06. juli 2005 - 11:47 #1
hej david :o)

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.

en base som denne f.eks.:

public class BaseForm : Page
{
  protected static string Script = "...";
  protected override void OnInit(EventArgs e)
  {
    if(!this.IsStartUpScriptRegistered(...))
          this.RegisterStartUpScript(..., Script);
  }
}

så kan du bare basere alle de sider der skal bruge script på den klasse - altså :

public class SomeForm : BaseForm
{
  ...
}

mvh
Avatar billede davidfossil Nybegynder
06. juli 2005 - 14:05 #2
Hey snep,

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.
Avatar billede snepnet Nybegynder
06. juli 2005 - 14:17 #3
hej igen :o)

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?

mvh
Avatar billede snepnet Nybegynder
06. juli 2005 - 14:36 #4
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);
  }
}

mvh
Avatar billede snepnet Nybegynder
06. juli 2005 - 14:40 #5
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
Avatar billede davidfossil Nybegynder
06. juli 2005 - 21:20 #6
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.

Smid et svar! :o)
Avatar billede snepnet Nybegynder
06. juli 2005 - 21:27 #7
jamen den er bare i vinkel.
vi skrives ved :o)
mvh
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester