2016-07-01 18 views
0

私は2つのブラウザウィンドウを持っていますBが並んでいます。jQuery:他のタブ/ウィンドウでイベントを発生

ウィンドウ内のボタンをクリックしたときBで機能を実行したいと思います。

私は、現在の関数の実行を開始するために、他のウィンドウを伝えるために、ウィンドウに窓Bとwindow.open(myurl、myurl)でをなhashchangeイベントを使用していますが、これは非常に動作しません。よくURLが変わるとき。

現在のウィンドウの外にあるjavascriptからinitイベントには別の解決策がありますか?

+1

[Window.postMessage()](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)を見てください。 –

答えて

1

私が考えることの1つの方法は、両方が同じドメインに属し、同じlocalStorageを共有する限り、他のタブ/ウィンドウが検出するlocalStorageの変更を引き起こすことです。あなたはこのような何かあなたのイベントのトリガ]タブにある場合 :

localStorage.setItem('detectMyChange', '0'); 
localStorage.setItem('detectMyChange', '1'); 

は、その後、あなたが他のタブ/ウィンドウ上でその変化を検出し、それに反応することができます(ここではJQueryを使用して - 私を、純粋なJavaScriptを使用して類似しています) :

$(window).on('storage', function (e) { 
    var storageEvent = e.originalEvent; 
    if ((storageEvent.key == 'detectMyChange') && (storageEvent.oldValue == '0') && (storageEvent.newValue == '1')) { 
     // Event detected, do some really useful thing here ;) 
    } 
}); 
トリガウィンドウに二回のlocalStorageを変更する理由は、あなたがのlocalStorage変数の変化を検出するので、同じコードを使用して(同じウィンドウまたは他に)再びイベントをトリガすることができることです

1つの既知の値から別の既知の値に変更する。

別の新しい値を設定して、別の情報を他のタブ/ウィンドウに送信することもできます。 お手伝いをしてください。

+0

素敵な答え!私はすでに、ローカルストレージを使用して、どのコンテンツが変更されたかを他のウィンドウに伝えます。しかし、私はストレージイベントを認識していませんでした。ありがとう! – typocoder

関連する問題