开发者

How to toggle the visibility of a script tag?

开发者 https://www.devze.com 2022-12-20 04:13 出处:网络
How do I toggle the visiblity of a <script> tag in the markup? Have the following javascript code in my master page:

How do I toggle the visiblity of a

<script>

tag in the markup? Have the following javascript code in my master page:

<script  type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
开发者_JAVA技巧            document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
  try {
   var pageTracker = _gat._getTracker("UA-108xxxx-2");
   pageTracker._trackPageview();
  } catch (err) { }
</script>
</body>

What is the best approach to serverside block this script from being rendered, if I want it to (like running in debug mode)


Put it inside a server-side if block.

For example:

<% if (!Request.IsLocal) { %>
<script  type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
            document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
  try {
   var pageTracker = _gat._getTracker("UA-108xxxx-2");
   pageTracker._trackPageview();
  } catch (err) { }
</script>
<% } %>


Try this:

<asp:PlaceHolder id="PHScripts" runat="server">
  <script  type="text/javascript">
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
  </script>
  <script type="text/javascript">
    try {
     var pageTracker = _gat._getTracker("UA-108xxxx-2");
     pageTracker._trackPageview();
    } catch (err) { }
  </script>
</asp:PlaceHolder>

In your page:

PHScripts.Visible = !IsDebugMode;

For settings, I use a static class called AppSettings, and have a simple property like this beside the rest to determine if it's a debug build:

public static bool IsDebugMode
{
  get
  {
#if DEBUG
  return true;
#else
  return false;
#endif
  }
}

Then anywhere in the app:

AppSettings.IsDebugMode;


There are many ways to do this. One would be to add in a preprocessor directive, put your script in an external file and register the script from the code behind:

code behind:

protected void Page_Load(object sender, EventArgs e)
{
#if !DEBUG
    Page.ClientScript.RegisterClientScriptInclude("myScript", "/path/to/my/script.js");
#endif
}

The above assumes you moved your script to /path/to/my/script.js file....

Here's a good reference on the #if preprocessor directive and how to use it: http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx


I know this was asked a while ago but hey-ho...

Why not use an <asp:Literal /> tag? As you can control the Visible state of this.

The bonus of this is that no extra content is rendered (doesn't mess up if you need a <script> in the <head> tag) and you don't have any inline code.

Regards


You might all be over complicating the problem.

Why not just and an ID and RunAt tag to the script:

<script id="DebugScript" runat="server">
var x = 1;
</script>

Then toggle it in the codebehind?

If bDebug Then
  DebugScript.visible = True
Else
  DebugScript.visible = False
End If
0

精彩评论

暂无评论...
验证码 换一张
取 消