如何切换脚本标记的可见性?

时间:2010-02-12 15:44:54

标签: asp.net javascript scripting google-analytics

如何切换

的可见性
<script>
标记中的

标记?在我的母版页中有以下javascript代码:

<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>
</body>

如果我想要这样做,服务器端阻止此脚本被阻止的最佳方法是什么(如在调试模式下运行)

5 个答案:

答案 0 :(得分:9)

将其放在服务器端if块中。

例如:

<% 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>
<% } %>

答案 1 :(得分:7)

试试这个:

<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>

在您的信息页中:

PHScripts.Visible = !IsDebugMode;

对于设置,我使用一个名为AppSettings的静态类,并在其余部分旁边有一个简单的属性,以确定它是否是一个调试版本:

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

然后在应用中的任何地方:

AppSettings.IsDebugMode;

答案 2 :(得分:1)

有很多方法可以做到这一点。一种方法是添加预处理程序指令,将脚本放在外部文件中,并从后面的代码中注册脚本:

代码背后的代码:

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

以上假设您将脚本移至/path/to/my/script.js file ....

以下是#if预处理程序指令以及如何使用它的一个很好的参考:http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx

答案 3 :(得分:0)

我知道这是前一段时间被问过但是嘿嘿......

为什么不使用<asp:Literal />代码?因为你可以控制Visible状态。

这样做的好处是没有额外的内容呈现(如果<script>标签中需要<head>),并且没有任何内联,那就不会搞砸了代码。

此致

答案 4 :(得分:-1)

你们可能都会使问题复杂化。

为什么不只是脚本的ID和RunAt标记:

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

然后在代码隐藏中切换它?

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