2017-03-10 3 views
0

タイトルからわかるように、URLクエリ文字列の変更に関数をバインドする方法を検討しています。URLクエリ文字列の変更に関数をバインドする方法(ハッシュチェンジではなく)

例:

から:/baby

へ:からが変身するとき/baby/?_bc_fsnf=1&brand[]=37

詳述すると、私は、関数が実行したいと思います~

乾杯!

+1

のようなURLの変更それはページをリフレッシュする予定です。あなたがonbeforeunloadを監視しない限り、そのイベントへのバインディングはありませんが、それはあなたが行っているURL、あなたが行っているものだけをあなたに伝えません。 –

+0

ページが読み込まれ、クエリ文字列が空でないかどうかを検出するたびにチェックを実行する必要があります。 –

+0

@MikeMcCaughan私はdocの準備を慰めているだけで、ページ全体をリフレッシュしていません。私はログを保存しており、時間を守っています - 決して変更はありません。 – Daneye

答えて

1

ページが更新されない場合は、誰かがおそらくhistory.pushStateまたはhistory.replaceStateを呼び出してURLを変更している可能性があります。

あり pushStatereplaceStateが呼ばれたときに追跡する方法で、内蔵されていますが、この trackユーティリティを使用して各機能をラップすることによって、それらを自分で追跡することができ

function track (fn, handler, before) { 
 
    return function interceptor() { 
 
    if (before) { 
 
     handler.apply(this, arguments) 
 
     return fn.apply(this, arguments) 
 
    } else { 
 
     var result = fn.apply(this, arguments) 
 
     handler.apply(this, arguments) 
 
     return result 
 
    } 
 
    } 
 
} 
 

 
var oldQs = location.search 
 

 
function handler() { 
 
    console.log('Query-string changed:', 
 
    oldQs || '(empty)', '=>', 
 
    location.search || '(empty)' 
 
) 
 

 
    oldQs = location.search 
 
} 
 

 

 
// Assign listeners 
 
history.pushState = track(history.pushState, handler) 
 
history.replaceState = track(history.replaceState, handler) 
 
window.addEventListener('popstate', handler) 
 

 

 
// Example code to change the URL 
 
history.pushState(null, 'Title 1', '/baby/?key=value') 
 
history.replaceState(null, 'Title 2', '/baby/?_bc_fsnf=1&brand[]=37')

関連する問題