2010-02-12 59 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>)並且您沒有任何內聯代碼,則不會出現任何額外內容。

問候