【问题标题】:how to get hash value from the URL如何从 URL 中获取哈希值
【发布时间】:2017-03-01 12:00:04
【问题描述】:

我正在努力将用户重定向到默认页面,当他们到达具有特定 URL 的登录页面时,我想知道在散列后获得值的最佳方法是什么。

示例: 着陆页网址为:http://www.google.com 但是当用户访问http://www.google.com/#puppies时,他们将被重定向到http://www.google.com/admin/signup

我创建了一个名为 my-redirect 的自定义模块,index.js 的代码如下所示

module.exports = {
    construct: function(self, options) {
        self.pageBeforeSend = function(req, callback) {
            console.log("URL",req.absoluteUrl);
            return callback(null);
        };
    }
};

问题是即使用户访问http://www.google.com/#puppies,console.log 也只会打印http://www.google.com

如何获得上例中的价值小狗?

【问题讨论】:

    标签: apostrophe-cms


    【解决方案1】:

    这与其说是撇号问题,不如说是一般的 Web 开发问题。网络浏览器根本不会将哈希及其之后的所有内容发送到网络服务器。

    这可以追溯到 JavaScript 之前的日子,当时哈希仅用于跳转到页面某处的“命名锚点”。

    因此,浏览器端 JavaScript 始终有责任对哈希进行处理(或忽略它)。

    你可以写:

    if (window.location.hash === '#puppies') {
      window.location.href = '/admin/signup';
    }
    

    非常简单!

    您还可以为 jQuery 使用任意数量的前端路由器,或者像 VueJS 或 React 之类的前端框架(将 React 路由器配置为使用哈希),但对于这个简单的任务来说,这将是多余的。

    当然,您可以将此代码放在脚本标记中,或者您可以在使用撇号“推送”的 JavaScript 文件中执行此操作。您可以将代码放在相对于您的项目的名为 lib/modules/apostrophe-assets/public/js/site.js 的文件中(不要修改撇号 npm 模块),并将其添加到 app.js 中的模块配置中:

    apostrophe-assets: {
      scripts: [ 'site' ]
    }
    

    希望对您有所帮助!

    【讨论】:

    • 哈!谢谢你!汤姆,我一开始就应该知道的。感谢您的回复。
    猜你喜欢
    • 2015-10-17
    • 2012-10-31
    • 2011-04-20
    • 2010-12-19
    • 1970-01-01
    • 2016-07-22
    • 2023-03-24
    • 1970-01-01
    • 2011-08-10
    相关资源
    最近更新 更多