我有一个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 {
}