【问题标题】:Allowing href links with hashes on them to bypass SammyJS routing允许带有哈希的 href 链接绕过 SammyJS 路由
【发布时间】:2013-09-25 23:12:53
【问题描述】:

我定义了以下服务器端 URL 映射:

/main/item1
/main/item2

我添加了 SammyJS 路由支持,以便能够执行以下操作:

/main/item1#/         /* main view */
/main/item1#/topups   /* topup view */

我已经这样设置了 SammyJS:

s.app = Sammy(function() {
    this.get('#/topups', function() {
        console.log('Initializing topups view.');
    });
    this.get('#/', function() {
        console.log('Initializing main view.');
    });
});

问题是,我的页面中有一个摘要部分,它重定向到不同“项目”的顶部视图。例如,我在网址/main/item1#/,在这个页面中,有一个标签<a href="/main/item2#/topups">item 2's topups</a>

我希望被重定向(页面刷新)到新的 URL,但是,SammyJS 似乎正在拦截 /main/item2#/topups 调用并简单地运行我定义的 this.get('#/topups') 路由。

我希望由于哈希之前的 URL 路径 /main/item1/main/item2 不同,因此不会触发 SammyJS 路由。

有没有办法防止这种行为在 SammyJS 中发生?

【问题讨论】:

    标签: javascript sammy.js


    【解决方案1】:

    我对 Sammy 了解不多,但我可以从任何路由器的行为方式告诉你,它会捕获路由可能性中的第一个匹配项,因此,以 #/topups 结尾的任何内容都将被视为相同只要它在井号之后。

    所以你最好这样定义路由器:

    this.get('#/topups/:item', function() {
        console.log('Initializing topups view for item: '+ item);
    })
    

    然后使用如下 URL 调用页面:

    <a href="/main/#/topups/item2">item 2's topups</a>
    

    我希望这就是你要找的东西

    【讨论】:

      【解决方案2】:

      我很确定使用完整的 URL 重定向你。

      <a href="http://www.example.com/main/item2#/topups">Item 2 top ups for the lazy coder</a>
      

      但是,这将导致页面重新加载。如果您修改 Labib 的答案,您可以获得更好的解决方案:

      this.get('#/topups/:item', function () {
        console.log('Doing some post processing on current item');
        console.log('Now redirecting you to ' + this.params.item);
        window.location.href = 'http://example.com/menu/# + this.params.item +#/topups';
      });
      

      同样,这会导致页面重新加载,但如果您不介意,则可以使用任何一种方法。

      注意:Sammy 还会为您检查表单提交。每次我使用它都会让我绊倒。 This post有解决办法。

      【讨论】:

      • 我最终做了类似的事情,因为我发现如果你使用window.location.href = '/main/item2#something',即使没有指定完整的 URL,Sammy 也不会妨碍你。感谢您确认此行为,以及有关表单提交的额外信息。
      猜你喜欢
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 2018-04-17
      • 2016-10-25
      • 2012-12-28
      相关资源
      最近更新 更多