〜/ javascript中的等价物

Vik*_*ram 43 javascript asp.net web-applications relative-path

在JavaScript中进行基于"root"的路径引用的任何聪明方式,就像我们~/在ASP.NET中的方式一样?

Mif*_*Fox 46

让您的网页生成标记,例如:

<link rel="home" id="ApplicationRoot" href="http://www.example.com/appRoot/" />
Run Code Online (Sandbox Code Playgroud)

然后,在JavaScript中有一个提取值的函数,例如:

function getHome(){
    return document.getElementById("ApplicationRoot").href;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您要使用服务器端代码生成值,为什么需要将其放在<link>元素中并使用getElementById检索它?只需执行<script> var home ='<%= HttpContext.Current.Request.Url.Scheme +"://"+ HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.ApplicationPath%>'; </SCRIPT> (5认同)
  • 将它放在<link>标记中允许您将JS与标记分开.当然,Web表单无论如何都会在您的标记中抛出相当多的JS,因此在该环境中变量可能更容易. (3认同)

Kam*_*rey 38

使用基本标签:

<head>
   <base href="http://www.example.com/myapp/" />
</head>
Run Code Online (Sandbox Code Playgroud)

...

从现在开始,无论是在javascript还是html中,此页面上的任何链接都将使用相对于基本标记,即" http://www.example.com/myapp/ ".

  • 请注意,使用基本标记也可能存在问题,请参阅[http://stackoverflow.com/questions/1889076/is-it-recommended-to-use-the-base-html-tag]. (3认同)

doe*_*man 10

您还可以使用asp.net功能VirtualPathUtility:

<script>
var basePath = '<%=VirtualPathUtility.ToAbsolutePath("~/")%>';
</script>
Run Code Online (Sandbox Code Playgroud)

注意:我没有将路径编码为JSON -string(转义引号,控制字符等).我不认为这是一个大问题(例如,引号不允许在URL中转义),但是人们从不知道......

  • 该方法应该是:VirtualPathUtility.ToAbsolute("〜/")这是最好的方法,它提供了更大的灵活性,因为它可以部署为虚拟目录或根Web应用程序 (4认同)

Red*_*ves 8

我通常在js文件的顶部创建一个变量并为其分配根路径.然后我在引用文件时使用该变量.

var rootPath = "/";
image.src = rootPath + "images/something.png";
Run Code Online (Sandbox Code Playgroud)


Llo*_*oyd 6

〜/是应用程序根目录而不是文字根,它互为〜/表示 <YourAppVirtualDir>/

要在JavaScript中创建一个字面根,它只是/,即"/root.html".在JavaScript中无法获得类似于应用程序级别的路径.

您可以在ASPX文件中破解它并将其输出到标记中,但我会考虑其安全含义.


Nil*_*zor 6

可以改进Kamarey的答案以支持动态基本路径:

<head>    
      <base href="http://<%= Request.Url.Authority + Request.ApplicationPath%>/" />    
</head> 
Run Code Online (Sandbox Code Playgroud)

无论部署配置如何,这都将确保正确的根路径.

公平地说,这不能回答原始问题,但它消除了从javascript获取根路径的大多数需求.只需在任何地方使用相对URL,而不使用斜杠作为前缀.

如果你仍然需要从javascript访问它,添加一个id属性并使用document.getElementFromId()MiffTheFox建议 - 但在base-tag上.


Jer*_*emy 5

另一个更简单,更通用的选项是:

<script src="/assets/js/bootstrap.min.js"><script>
Run Code Online (Sandbox Code Playgroud)

并像这样使用Page.ResolveClientUrl:

<script src='<%=ResolveClientUrl("~/assets/js/bootstrap.min.js")%>'></script>
Run Code Online (Sandbox Code Playgroud)

那么无论哪个子目录,URL都将始终正确呈现。