Javascript 浏览器如何处理带有片段标识符的URL

Javascript 浏览器如何处理带有片段标识符的URL,javascript,browser,cross-browser,Javascript,Browser,Cross Browser,我遇到了这样一种情况,我想确定浏览器如何处理包含片段标识符的URI,例如Products\a。假设我的网站有两个页面:产品和常见问题解答。然后,在每个页面中,我想使用#导航到特定的HTML元素。因此: 如果我已经在Products页面,那么href=“Products#A”和href=“#A”之间有什么区别 如果我在页面常见问题解答 在href=“Products#A”中放置URL是否总是会触发服务器调用,或者浏览器是否知道它已经在Products页面上,并且不会进行服务器调用 我添加了什么/(

我遇到了这样一种情况,我想确定浏览器如何处理包含片段标识符的URI,例如
Products\a
。假设我的网站有两个页面:
产品
常见问题解答
。然后,在每个页面中,我想使用#导航到特定的HTML元素。因此:

  • 如果我已经在
    Products
    页面,那么
    href=“Products#A”
    href=“#A”
    之间有什么区别
  • 如果我在页面
    常见问题解答
  • href=“Products#A”
    中放置URL是否总是会触发服务器调用,或者浏览器是否知道它已经在
    Products
    页面上,并且不会进行服务器调用
  • 我添加了什么
    /
    (比如
    href=“/products#a”
    )?这会强制服务器调用吗
  • 这是所有浏览器的标准吗

  • 我已经做了一些测试,但我缺少一些理论。

    为了回答你的问题,我用自己的经验来做这些

  • 如果我已经在
    Products
    页面,那么
    href=“Products#A”
    href=“#A”
    之间有什么区别?

    没什么。为了安全起见,如果您位于不同的页面,并且内容是使用相同的部分(或相同的源)呈现的,这可能会有所帮助

  • 如果我在
    常见问题解答

    它通常导航到
    产品
    ,找到带有
    id=“A”
    的元素并滚动到那里

  • href=“Products#A”
    中放置URL是否总是会触发服务器调用,或者浏览器是否知道它已经在
    Products
    页面上,并且不会进行服务器调用?

    这是一个客户端调用,没有对URL片段进行服务器调用

  • 这是所有浏览器的标准吗?

    我相信是这样


  • 如果链接(片段除外)解析为与当前页面相同的URL,则它将在当前页面周围导航

    如果它解析为另一个页面,那么它将加载一个新页面


    相对(或绝对)URL实际上是如何表示的并不重要,重要的是它的解析方式。

    我刚刚添加了问题4。它是否强制服务器调用?@PauloJaneiro如果缓存中的链接过期和/或页面不是
    产品
    ,它将强制服务器调用。明白了吗?好的,但正如我在对昆汀的评论中所说的,你可以在www.nutiner.com上看到,当你进一步浏览主页,然后使用菜单中的链接导航到其他虚拟页面(使用#),而没有互联网连接时,它们不会显示。它们应该(因为您已经加载了main.html)@它们是使用AJAX buddy加载的。Praveen,我感谢您的支持,但事实上它们不是。我在服务器端使用Phoenixframework,在客户端使用零框架/Ajax。一切都是纯CSS技巧和我制作的简单路由器。这就是为什么我对这个问题也感到惊讶,因为它本来应该非常简单,因为那个网站只有两个页面:“index”和“main”,而用不同的方式编写URL(main.html#vs#)会导致不同的结果。可能是我操作“window.location.hash”的方式,但它也很奇怪。无论如何,非常感谢!当你说如果它解析为与当前页面相同的URL,它将导航到当前页面,你的意思是它不会进行服务器调用,对吗?如果是这样的话,为什么(至少在我的测试中)当我没有互联网连接时,它不工作?我以为它会导航到已经加载的页面中的#…这就是为什么这个问题看起来很简单,但我认为它不是那么简单。