10

alert()ブラウザの戻るボタンや進むボタンがクリックされたとき、またはJavaScriptでハッシュが変更されたときにしたい。このソリューションを試してみましたが、機能していますが、Web ページの他のリンクで問題が発生しており、リンク クリック イベントで各リクエストを 2 回送信しています。

setInterval()関数を使用せずにキャプチャするソリューションはありますか? では、ハッシュの変更または戻る/進むボタンのクリック イベントをキャプチャする必要がありますか? 最新のすべてのブラウザーで動作する単純な JavaScript コード/関数/プロパティが必要です。

解決策はありますか?

ありがとう

4

4 に答える 4

14

良い考えではない

この背後にある理由を説明していただけますか?私たちは皆、戻る/進むなどを防ぎ、ブラウザ機能を混乱させるというこの道を歩んできました。

ただし、ブラウザに従って、そのようにアプリケーションを作成する方が良いことが判明したため、これらのことは無関係になります。また、ブラウザーがクライアントの JavaScript アプリにますます多くのことをロックしていることも事実であるため、(数回の) ブラウザーのアップグレード後にアプリが失敗する可能性が非常に高くなります。

HTML5 を使用する

HTML5 History 仕様はまさにあなたが求めているものかもしれません。これは、Ajax アプリケーションと browser0s のバック/フォワード機能に関して、物事が機能し、実行される方法です。確認することをお勧めします。これをかなりうまく行う動作デモを見てください。

于 2011-11-21T07:51:07.940 に答える
4

これがRobertKoritnikが探していた答えだと思います。ここで見つけました:https ://developers.google.com/tv/web/articles/location-hash-navigation

ロケーションハッシュが更新または変更されるたびに発生するイベント(window.onhashchange)があるため、JavaScriptを使用してイベントハンドラーを設定し、このイベントをリッスンし、ハッシュに基づいてコードを実行するだけです。これは基本的にそれが行われる方法です:

function getLocationHash() {
  return window.location.hash.substring(1);
}
window.onhashchange = function(e) {
  switch(getLocationHash()) {
    case 'state1': 
      execute code block 1;
      break;
    case 'state2':
      execute code block 2;
      break;
    default: 
      code to be executed if different from case 1 and 2;
  }
}

私はそれを私のサイトで動作させています: http ://www.designhandler.com

それはすべて動的に変化するコンテンツです。まだajaxはありませんが、終了するとそうなります。私はまだwindow.location.hashを使用して、サイトの状態を追跡しています。サイト内を移動し、サイトが履歴に登録されたら戻るボタンを使用して移動を開始すると、後でページをリロードする必要がなく、ユーザーが実際にナビゲーションをクリックしているかのように状態が動的に変化します。

于 2012-07-18T12:48:04.567 に答える
3

これはハッシュ用ですか、それともリダイレクト用ですか? あなたは何をしようとしているのですか?この種のアクションは通常、非常に煩わしいものです。

ページを離れる前に、この JavaScript の「onbeforeunload」イベントを試してください。


編集済み

実際、あなたが提供するリンクは非常に正確です。

var hash = location.hash;

setInterval(function()
{
   if (location.hash != hash)
   {
       hashUpdatedEvent(hash);
   }
}, 100);

function hashUpdatedEvent(hash)
{
     switch(...);
}

変更すると、リンクの重複アクションの問題が修正されます

<a href="javascript:void(0)" onclick="someFuncion()">Go for it</a>

function someFuncion()
{
   doWhatever();
   location.hash = 'somethingwasdone';
}

function hashUpdatedEvent(hash)
{
     if(hash == 'somethingwasdone')
     {
         doWhatever();
     }
}

単に(ハッシュを更新し、「イベント」にアクションを処理させる):

<a href="javascript:void(0)" onclick="someFuncion()">Go for it</a>

function someFuncion()
{
   location.hash = 'somethingwasdone';
}

function hashUpdatedEvent(hash)
{
     if(hash == 'somethingwasdone')
     {
         doWhatever();
     }
}
于 2011-11-21T07:45:52.900 に答える