【问题标题】:Is it possible to catch URL changes in browsers address bar with javascript是否可以使用 javascript 在浏览器地址栏中捕获 URL 更改
【发布时间】:2014-12-16 20:55:26
【问题描述】:

是否可以通过 Angular 或 JavaScript 捕捉浏览器地址栏中的 URL 变化?

如果有人手动更改浏览器地址栏中的URL,我想捕捉这个事件。

【问题讨论】:

    标签: javascript angularjs url-rewriting location


    【解决方案1】:

    你也可以通过以下方式捕捉它:

    $rootScope.$on('$routeChangeStart', function(params) { 
       //catch event
    });
    

    您可以在angular docsstackoverflow 了解更多信息

    【讨论】:

    • 嗨@cbass,当手动更改网址时,$scope.$on 无法捕捉
    • 好吧,我的意思是。如果用户按下回车,可能会导致浏览器重新加载;然后还应用程序重新初始化,这意味着没有要捕获的事件。
    • 你的意思是没有办法抓住这个。
    • 是的,如果您修改 url 并按回车,浏览器将重新加载页面。除非你阻止这是某种方式。
    • 这不能回答问题。我不知道为什么 OP 接受了这个。
    【解决方案2】:

    您可以通过创建如下事件处理程序来检测散列中的更改(例如http://example.com/#foo):

    window.addEventListener('hashchange', function(e) { 
        console.log('Hash has changed!'); 
    });
    

    具体到 Angular,你可以使用$routechangestart 事件来捕捉 URL(即路由)的变化

    $rootScope.$on("$routeChangeStart", function (event, next, current) {
        // do something ...
    }); 
    

    或者,您可以通过 routeProvider 定义您的路由,并根据设置的路由执行特定的控制器。

    【讨论】:

    • 在 html5 模式下听 hashchange 不起作用。总是使用带有角度的 $routeChangeStart
    • 我添加了 Angular 的方法,尽管他要求 JS 或 Angular 解决方案。
    • 是的,但他已经用 url-rewriting 标记了这个问题,这意味着他将使用 html5mode
    • 我的问题是,当有人手动更改浏览器地址栏中的 url 时,我该如何捕捉。
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 2011-12-25
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多