0

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

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

我创建了一个名为 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

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

4

1 回答 1

2

这不是撇号问题,而是一般的 Web 开发问题。Web 浏览器根本不会将哈希及其之后的所有内容发送到 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' ]
}

希望这有帮助!

于 2017-03-01T04:00:04.927 回答