【问题标题】:Check if homepage using window.location检查主页是否使用 window.location
【发布时间】:2015-02-08 13:50:34
【问题描述】:

是否可以使用window.location检查我是否在网站的主页/索引上?

我目前正在使用

检查 url
window.location.href.indexOf("/category/something")

但是如何查看主页呢?它不包含任何段。

注意:我不知道主页 URL 是什么,所以我不能使用例如 window.location.href.indexOf("myhomepage.html") 这样的 URL 名称

更新:我唯一的线索是主页没有 URL 段。

【问题讨论】:

  • “主页”是指域根目录吗?
  • 如果您对主页的网址一无所知,则无法通过检查网址来测试您是否在主页上。
  • URL 不一定代表服务器正在服务/调用的实际页面/文件/操作。通常,您需要依赖应用程序代码来提供此信息(并可能也将其公开给客户端)。
  • Get host name in JavaScript 的可能重复项
  • 页面(可能是页眉/页脚)是否包含指向主页的链接?如果是这样,抓住那个 并将 href 与 window.location.href 进行比较

标签: javascript url


【解决方案1】:

homepage 一词本身是一个相当模糊的结构,在技术上无法识别。根据您的屏幕尺寸、设备、凭据、浏览器、日期/时间、地理位置等,您可以有几个不同的登录页面。

您可以确保您位于这些登录页面之一的唯一方法是在对域的初始GET 请求期间进行控制(例如http://www.example.com)。

因此,如果您已经在该页面上,则没有真正的方法可以知道您是如何到达该页面的,以及这是否是该域提供的默认页面,尽管您可以尝试一些技巧得到一个通用的(虽然很容易出错)的想法。

例如,您可以编译一个常用主页路径列表:

var homepages = [ '/', 'index.html', 'index.htm', 'index.php', 'main.html', 'main.htm', 'homepage.html', 'index2.htm' ]; 

然后对比提供的window.location.pathname:

if (homepages.indexOf(window.location.pathname) >= 0) {
    // we might be on a "homepage"
}

【讨论】:

  • 感谢您的回答。我认为一个非常明显的线索是 URL 中没有分段。
  • 是的,这是理想的情况,但是有很多网站不遵循这个约定。这完全取决于您的用例。
【解决方案2】:

许多网站的主页,包括 stackoverflow 都包含指向同一主页的链接。

// browser url = http://example.com
<a href="http://example.com">my site</a>

如果你可以访问源,你可以在服务器端识别这个链接

<a id="homepage" href="http://example.com"/>my site</a>

所以,检查你是否在主页上:

document.addEventListener('DOMContentLoaded', function(e) {
  var link = document.querySelector('#homepage');
  if (link.href == window.location.href) {
    //i'm on the homepage
  }
})

所以我刚刚看到你对这个问题的更新。如果你知道没有 url 段,window.location.pathname 不会总是“/”

【讨论】:

    【解决方案3】:

    如果你只是简单地做了window.location 并检查了那里的参数,如果没有附加页面/路径,url 匹配源等,那是否不足以检测到 - Idk,我从来没有需要这样做吗?这也可能适用于 .NET 和“其他”类型的 HTML 命名约定(即 index.html 与 index.htm)。此外,如果有人更改了文档根目录或主页指针,您或多或少会知道(也就是不在乎),因为 window.location 您可以检查以下内容:

    window.location
    Location {replace: function, assign: function, ancestorOrigins: DOMStringList, origin: "http://stackoverflow.com", hash: ""…}ancestorOrigins: DOMStringListassign: function () { [native code] }hash: ""host: "stackoverflow.com"hostname: "stackoverflow.com"href: "http://stackoverflow.com/"origin: "http://stackoverflow.com"pathname: "/"port: ""protocol: "http:"reload: function reload() { [native code] }replace: function () { [native code] }search: ""toString: function toString() { [native code] }valueOf: function valueOf() { [native code] }__proto__: Location
    

    其中有path = '/'。这很好地表明了主页'ish'ness。

    【讨论】:

      【解决方案4】:

      JavaScript 只知道它的当前上下文。它不知道它在站点的层次结构中的什么位置,所以不,如果不知道主页的 URL,您就无法检查您是否在主页上

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 2015-01-19
        • 2012-09-09
        • 1970-01-01
        相关资源
        最近更新 更多