2010-02-12 64 views
8

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

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

什么是服务器端的块,最好的办法从正在呈现这个剧本,如果我希望它(如在调试模式下运行)

回答

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

谢谢,我想我会坚持这一个;) – citronas 2010-02-12 16:08:34

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; 
+0

我认为你的意思'PHScripts.Visible = IsDebugMode;' – 2010-02-12 15:58:08

+0

@çağdaş - 修正了,谢谢!如果有任何问题,我通常会更多地进行调试。 – 2010-02-12 16:00:07

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文件....

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

-1

您可能全部是在问题复杂化。

为什么不和ID和RUNAT标签的脚本:

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

然后切换它的代码隐藏?

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

我首先尝试了这个,但不知何故,我收到了上面发布的脚本的编译错误。 – citronas 2010-02-12 16:21:38

+1

乍一看,这是很明显的解决方案,但不幸的是'

0

我知道这是问前一段时间,但嘿浩...

为什么不使用<asp:Literal />标签?正如你可以控制这个状态。

这样做的好处是不会呈现额外的内容(如果您需要<head>标记中的<script>)并且您没有任何内联代码,则不会出现任何额外内容。

问候