【问题标题】:Keeping urls relative?保持网址相对?
【发布时间】:2011-10-19 05:23:03
【问题描述】:

我们有多个版本的网络应用程序,每个版本都在根目录下各自的虚拟文件夹中运行。在开发机器上,该应用程序正在运行超出根目录:

http://localhost/              
http://localhost/v1
http://localhost/v2

每个应用程序都有许多文件夹和许多页面。图片都在 ~/images 文件夹中:

http://localhost/images/awesome.jpg
http://localhost/v1/images/awesome.jpg
http://localhost/v2/images/awesome.jpg

http://localhost/index.aspx
http://localhost/v1/index.aspx
http://localhost/v2/index.aspx

http://localhost/foo/warble.aspx
http://localhost/v1/foo/warble.aspx
http://localhost/v2/foo/warble.aspx

现在,在我的 javascript 中,我需要引用其中一张图片,但它必须位于该版本的文件夹中。我不一定知道哪个页面正在使用这个 Javascript。如何将相对 URL 插入图像?当然,我可以使用 ../../images/awesome.jpg 之类的东西,但这仅适用于从根目录中删除了两个文件夹的页面:

  • 适用于:http://localhost/v1/foo/bar/page.aspx
  • 不适用于:http://localhost/v1/foo/page.aspx

由于应用托管的版本控制问题,我不能使用绝对路径。有什么想法可以克服这个最麻烦的障碍吗?我正在标记 jQuery,以防有一些 jQuery 库函数可以处理这个问题。

【问题讨论】:

    标签: jquery asp.net html url relative-path


    【解决方案1】:

    我愿意

    location.origin + "/" + location.pathname.split("/")[1] + "/images/awesome.jpg"
    

    -对不起,令人费解的正则表达式。-

    编辑:

    更好 ^

    【讨论】:

      【解决方案2】:

      您需要将图像目录 url 从您需要的每个页面上的服务器端代码传递给 javascript。考虑将它放在布局中的 <head> 元素内,以及需要它的 javascript 文件之前。

      <script>
        var imagePath = '<%=Page.ResolveUrl("~/images/") %>';
      </script>
      

      并使用 MVC 剃须刀引擎:

      <script>
        var imagePath = '@Url.Content("~/images/")';
      </script>
      

      然后在您的 javascript 文件中使用全局变量 imagePath 链接到您的图片:

      img.src = imagePath + 'image01.jpg';
      

      另一种解决方案是使用 CSS,它可以通过链接到 images 目录中的 CSS 文件并通过 CSS 类和 id 在 javascript 中使用图像来处理相对路径。

      【讨论】:

      • 这至少适用于 ASP.NET MVC,也许有人可以告诉我如何用普通的 ASP.NET 来完成,因为我已经忘记了 MVC 之前的所有内容。 :)
      • 不幸的是,这不是 MVC。 :(
      • 是的,它是 MVC 剃须刀视图引擎。我认为它类似于普通 ASP 中的 ?只是不知道没有 MVC 的对应函数是什么,但我想你还是明白了。
      • Page.ResolveUrl 不能在客户端使用。这是一个 .js 文件。
      • 是的,但是您在定义全局 javascript 变量的实际页面上写下该行。然后在 .js 文件中使用该变量。
      【解决方案3】:

      我最初的想法是,您可以通过使用 Http 处理程序或使用 IIS 的 URL 重写模块来解决这个问题。您的生产网站是否会类似于“mysite.com/v1”等?

      【讨论】:

        猜你喜欢
        • 2010-10-28
        • 1970-01-01
        • 2021-06-06
        • 2015-04-09
        • 1970-01-01
        • 2012-06-01
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        相关资源
        最近更新 更多