Как переключить видимость тега скрипта? - PullRequest
8 голосов
/ 12 февраля 2010

Как мне переключить видимость

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

9 голосов
/ 12 февраля 2010

Поместите его в блок 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>
<% } %>
7 голосов
/ 12 февраля 2010

Попробуйте это:

<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;
1 голос
/ 12 февраля 2010

Есть много способов сделать это. Можно было бы добавить директиву препроцессора, поместить ваш скрипт во внешний файл и зарегистрировать скрипт из кода:

код позади:

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

0 голосов
/ 05 апреля 2017

Я знаю, что это спросили некоторое время назад, но эй-хо ...

Почему бы не использовать тег <asp:Literal />? Как вы можете контролировать Visible состояние этого.

Бонусом этого является то, что никакой дополнительный контент не отображается (не портите, если вам нужен <script> в теге <head>), и у вас нет встроенного кода.

Привет

0 голосов
/ 12 февраля 2010

Возможно, вы все усложняете проблему.

Почему бы не просто ID и тег RunAt для скрипта:

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

Затем переключить его в коде позади?

If bDebug Then
  DebugScript.visible = True
Else
  DebugScript.visible = False
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...