根据托管的URL加载特定的JS文件



我有一个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>*@

本质上,如果网站是Live或正在测试,我会对我想要使用的脚本进行注释或取消注释。我希望能够以某种方式动态地做到这一点。一个解决方案可能是,它是否可以读取当前的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 中

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

最后,在cshtml页面(对我来说是_layout)中,我设置了脚本

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

由于您使用的是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>

**我不认为这段代码会按原样运行。这是为了给你一个大致的想法。

您可以检查此答案: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." );
    });
}

由于您使用的是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>
}

其中CCD_ 1是指示当前环境是Test还是Live的变量。这个解决方案将运行服务器端,并且不会用更多的脚本污染HTML

EDIT:如果没有环境变量,可以将bool object从控制器传递到视图(使用ViewBag),如果它是在DEBUG中构建的,则可以使用预处理器指令设置为true。

[代码]

bool isLive = true;
#if DEBUG
isLive = false;
#end if;

您的if语句可能是

var a = document.createElement('a');
a.href = url;
var hostname = a.hostname;
if(hostname == "yourlivewebsite.com") {
} else {
}

相关内容

  • 没有找到相关文章

最新更新