如果用户访问我网站的根网址,我想启动一些脚本。
例如,我希望在用户访问时在我的视图中执行某些操作
www.example.com
example.com
www.example.com/
http://www.example.com
http://example.com
... [以上的各种组合。]
而不是www.example.com/anything else
在ASP.NET MVC 3 [Razor]网站和javascript的视图页面中检查这个的最安全的方法是什么?另外,有没有办法找出只使用javascript?
谢谢。
答案 0 :(得分:58)
最简单的JavaScript方法是:
var is_root = location.pathname == "/"; //Equals true if we're at the root
即使http://example.com/?foo=bar#hash
也会生成正确的结果,因为路径名会排除查询字符串和位置哈希值。
看看:
http://anything-but-a-slash/ Root
/?querystring Root
/#hash Root
/page Not root
如果根文件夹中有索引文件,请查看以下示例:
var is_root =/^\/(?:|index\.aspx?)$/i.test(location.pathname);
上一行使用的是正则表达式。必须转义特殊字符,/i
后缀使模式不区分大小写。如果您希望案例匹配,请省略i
标记。
以图形方式呈现相同的正则表达式:
答案 1 :(得分:1)
试试这个更健壮的正则表达式:
<强>正则表达式强>
var isRoot =/^(\/|\/index\.asp|\/index\.aspx)$/i.test(location.pathname);
的描述强>
的演示强>
答案 2 :(得分:0)
使用正则表达式:
(/^https?\:\/\/[^\/]+\/?$/).test(window.location.href)
答案 3 :(得分:0)
我认为
if(window.location == window.location.hostname) {
//is root
}
编辑:请勿使用此功能,请参阅评论
答案 4 :(得分:0)
测试&#34; /&#34;的路径名;当我在我的在线IDE中以调试/预览模式运行我的应用程序时失败。换句话说,它通常提供一个干净的网址(没有.html
),除非我从Cloud9提供服务,在这种情况下,它与index.html
一起提供。
所以,这对我有用:
if(window.location.pathname.length == 1 || window.location.pathname.length == 0 || window.location.pathname === "/index.html" || window.location.pathname === "/index"){
//I'm at the app root
}
答案 5 :(得分:0)
以下情况如何:
if (location.pathname == "/" || (window.location.href.indexOf("Index") > -1)){
console.log("do stuff")
}
请注意“索引”区分大小写