阻止sammy.js窃取'真正的链接'

thk*_*ang 7 javascript sammy.js knockout.js

我最近开始使用knockout.js和sammy.js来改进我的应用程序.但是我遇到了一些问题.

我在页面上有一些有效的链接 - 用户应该实际导航到该位置,而不是使用模仿导航行为sammy.js.我希望只有基于散列的链接由sammy.js路由,但它也会拦截不包含任何哈希的链接.

例如,它拦截<a href="/logout">logout</a>.

路由的js部分是:

Sammy(function () {
    this.get('#/', function () {
         ...
    });

    this.get('#:id', function () {
         ...
    });

    this.get('', function () { this.app.runRoute('get', '#/') });
}).run();
Run Code Online (Sandbox Code Playgroud)

我认为this.get('' .. )部分是调用此行为的罪魁祸首 - 我是从knockout.js教程得到的,该教程说该行是必要的,以允许其他来源的用户正确浏览我的网页.knockout.js代码运行的页面是/w/.我希望sammy.js只能在/w/或者工作,至少允许用户导航到/logout.我怎么能做到这一点?

rob*_*lep 10

我使用Sammy已经有一段时间,但我认为您可以使用以下disable_push_state设置关闭此行为:

Sammy(function() {
  this.disable_push_state = true;
  ...
});
Run Code Online (Sandbox Code Playgroud)


HIL*_*EEN 1

您可以使用“周围”功能。有很多选择。我建议这样做,

假设有一些网址。点击该 url 后,您希望将服务器与该页面进行通信。例如,注销网址如“/logout”。

现在将该网址设置如下

"/logout?reload=true"
Run Code Online (Sandbox Code Playgroud)

这样,你就可以按照Sammy的代码进行控制

Sammy(function(){

    this.around(function(callback) {
        if(this.params.reload === 'true')       
           location.replace(this.path);
        else
           callback();
    });
    // Your routers are going to be here

}).run()
Run Code Online (Sandbox Code Playgroud)