0

次のコードを含む MVC ASP ページがあります。

<script type="text/javascript" src="https://TEST_DOMAIN.com/test.js"> </script>
@*<script type="text/javascript" src="https://LIVE_DOMAIN.com/Live.js"> </script>*@

基本的に、サイトが稼働中またはテスト中の場合に使用するスクリプトをコメントまたはコメント解除します。これを何らかの方法で動的に実行できるようにしたいと考えています。おそらく、1 つの解決策は、現在の URL を読み取って、その URL が Live/Test かどうかを判断できるかどうかです。

回答で更新(Whipdancerに感謝)

Web.config に次の URL を追加しました。

<add key="BundleJS" value="https://TEST_DOMAIN.com/test.js" />
<!--<add key="BundleJS" value="https://LIVE_DOMAIN.com/Live.js" />

次に、web.config 変換について調べます。しかし、これは私が以前持っていたものよりもはるかに優れています。

次のステップは、Global.asax.cs ファイルの Session_Start で、URL をアプリケーション変数に設定しました。

Application["BundleJS"] = System.Configuration.ConfigurationManager.AppSettings["BundleJS"];

これが設定された後、ビューのコントローラーに移動できました (ヒント: 私の場合、ビューはレイアウトだったので、親コントローラーに移動しました)。ActionResult メソッドの上または後に、 Application 変数をビューバッグに追加しました

ViewBag.BundleJS = HttpContext.Application["BundleJS"];

最後にcshtmlページ(私にとっては_layoutでした)で、スクリプトを設定しました

   <script type="text/javascript" src="@ViewBag.BundleJS"> </script>
4

4 に答える 4

2

ASP.NET MVC を使用しているため、Web 構成変換を使用してさまざまな環境を処理できます。

Web 構成変換の詳細

次に、web 構成パラメーターを使用して、global.asax (またはプライマリ ビュー コントローラーで可能) を介して読み込まれる適切な環境を決定します。

その後、コンパイル先の環境に基づいて適切な URL を自動的に決定できます。

in test web.config:

<appSettings>
    <add key="JSSource" value="https://TEST_DOMAIN.com/test.js" />
</appSettings>

in release web.config:

<appSettings>
    <add key="JSSource" value="https://LIVE_DOMAIN.com/Live.js" />
</appSettings>

global.asax では、次のようなことができます。

public class MvcApplication : System.Web.HttpApplication
{
    public static string jsUrl;

    protected void Application_Start()
    {
        jsUrl = System.Configuration.ConfigurationManager.AppSettings["JSSource"];
    }
}

あなたのページでは、次のようなものを使用できます。

<script type="text/javascript" src="@jsUrl"> </script>

** このコードがそのまま実行されるとは思いません。それはあなたに一般的な考えを与えることです。

于 2016-01-07T16:46:34.230 に答える
0

この回答を確認できます: https://stackoverflow.com/a/5819693/2710681

別の方法として、jQuery の Ajax getScript メソッドでテストすることもできますが、上記の方がおそらく優れています。

if (test) {
    $.getScript( "https://TEST_DOMAIN.com/test.js", function( data, textStatus, jqxhr ) {
      console.log( data ); // Data returned
      console.log( textStatus ); // Success
      console.log( jqxhr.status ); // 200
      console.log( "Test load was performed." );
    });
} else {
    $.getScript( "https://LIVE_DOMAIN.com/Live.js", function( data, textStatus, jqxhr ) {
      console.log( data ); // Data returned
      console.log( textStatus ); // Success
      console.log( jqxhr.status ); // 200
      console.log( "Live load was performed." );
    });
}
于 2016-01-07T14:34:29.657 に答える
0

Razor を使用しているため、サーバー側で実行できます。

@if(isLive)
{
    <script type="text/javascript" src="https://TEST_DOMAIN.com/test.js"> </script>
}
else
{
    <script type="text/javascript" src="https://LIVE_DOMAIN.com/Live.js"> </script>
}

whereisLiveは、現在の環境が Test か Live かを示す変数です。このソリューションはサーバー側で実行され、より多くのスクリプトで HTML を汚染しません

編集:環境変数がない場合はbool object、コントローラからビューに ( ViewBagを使用して) を渡すことができます。プリプロセッサ ディレクティブを使用して、DEBUG でビルドされている場合は true に設定します。

[コード]

bool isLive = true;
#if DEBUG
isLive = false;
#end if;
于 2016-01-07T14:39:44.427 に答える
-1

あなたのifステートメントは

var a = document.createElement('a');
a.href = url;
var hostname = a.hostname;

if(hostname == "yourlivewebsite.com") {

} else {
}
于 2016-01-07T14:42:05.323 に答える