2017-12-21 15 views
2

ページングとフィルタを備えた1ページのアプリケーションがあり、現在のURLが変更されたときを検出する必要があります。現在のURLにリスナーを追加し、変更時に何かをトリガーする簡単な方法はありませんか? (設定なし間隔はどちらか!)ユーザーが URLパラメータが変更されたときのリスナーイベント

  • My機能が
  • を実行しますwww.foobar.com?filter=helloために何か、URLの変更を行いますwww.foobar.com
    1. ユーザーの土地は、

      私はonhashchangeを試してみて、unbeforeunloadを試しましたが、どちらもこれには関係ありません。

      window.onbeforeunload = function(e) { 
          alert ('url changed!'); 
      }; 
      
      window.onhashchange = function() { 
      alert ('url changed!'); 
      } 
      

      URLにリスナーを追加する方法はありますか?また、変更するときはいつでも何かをトリガーしますか? (再び、単一ページアプリありませんのでリフレッシュ)

  • +1

    可能な複製を( https://stackoverflow.com/questions/6390341/how-to-detect-url-change-in-javascript) – klugjo

    +0

    私はそれを見ました - それは "onhashchange"シナリオです。私のものはちょっと違っていて、ハッシュもありません。間隔を設定したくありません。 – user3390251

    答えて

    1

    あなたがたsetIntervalを使用したくない場合は、history.pushStateイベントオーバーライドすることができます:[JavaScriptでURLの変更を検出する方法]の

    (function(history){ 
        const pushState = history.pushState; 
        history.pushState = function(state) { 
         if (typeof history.onpushstate == "function") { 
          history.onpushstate({state: state}); 
         } 
         // Call your custom function here 
         return pushState.apply(history, arguments); 
        } 
    })(window.history); 
    
    +0

    これは近づいています! Uncaught TypeErrorのコンソールエラーを返します。 'History'に 'pushState'を実行できませんでした:2つの引数は必要ですが、1つしか存在しません。それはサイトの他のコードと競合している可能性があります... – user3390251

    +0

    なぜ '歴史'、それは '歴史'でなければならないのですか? no caps – klugjo

    +1

    矢印関数は 'arguments'オブジェクトを公開しません。あなたは' history.pushState =(state、... args)=> {'と' pushState.call(history、state、... args ); ' –

    関連する問題