Dynamically include client-side javascript 2

  • Thread starter Thread starter Andrea Williams
  • Start date Start date
A

Andrea Williams

So I'm using a tweaked version of the code below, but when my page doesn't
have a form, the script doesn't seem to be registering. Is that by design?
and if so, is there another way to get a JS file to be registered when the
page doesn't have a form?

Andrea

submitted by Hugo:
You could read the script from disk instead of hard-coding it and
register it as a client script instead of using Response.WriteLine,
which always is a good idea. Because it is often used you could add
the script to cache instead of reading it from disk every time.

if(!Page.IsClientScriptBlockRegistered("myFunctionKey"))
{
FileInfo scriptFile=new FileInfo(MapPath("/scripts/float.js"));

if(scriptFile.Exists)
{
StreamReader reader=new StreamReader(scriptFile.FullName,true);
try
{
string script=string.Format(
"<script language='javascript'><!-- {0} --></script>",
reader.ReadToEnd());

Page.RegisterClientScriptBlock("floatKey",script);
}
finally
{
reader.Close();
}
}
}

/Hugo
 
You can't use any Controls outside of a WebForm. This is just a guess, but I
would expect that the string passed to the function is converted to a
Control prior to inserting it in the Page (all HTML in the Page Template is
converted to Controls at run-time). Is there some special reason you don't
want a form tag in the Page? If so, you could always use the old
Response.Write() method.

--
HTH,
Kevin Spencer
..Net Developer
Microsoft MVP
Big things are made up
of lots of little things.
 
its the HtmlForm control that renders client script, so if you do not have
one, it will not render. if you are not using forms, then you can use the
asp:placeholder and the HtmlGeneric control to output script.

HtmlGenericControl myScript = new HtmlGenericControl("script");
myScript.InnerText = "alert('hi')";
myScriptPlaceHolder.Controls.Add(myScript);

-- bruce (sqlwork.com)
 
No particular reason to not include a form, just that this particular page
doesn't need one. I have no controls on this particular page.

My alternative is to create some kind of code that will figure out on the
fly where the debugfloat.js file is in relation to the current page and set
the scr in a javascript tag.

All of my pages are inheriting from ASPCommon.cs and I wanted to be able to
load the js script without having to add HTML to each aspx page. This js
file is only needed when my Debug class is enabled, and it's only going to
be for my IP address. I don't want the js file included for anyone else.
This will go on the production server so that I can more easily troubleshoot
problems. Because I don't want it showing up when Debug is disabled, I
wanted to add it dynamically to the page. I'd really like it to be added
inside the HEAD tags, but haven't figured out a way to do that yet.

Any other ideas?

Andrea
 
Back
Top