2010-11-27 19 views
7

J'ai utilisé des hachages pour transmettre des données entre les pages (comme le réglage scrollTop(), etc.) et j'ai également utilisé l'événement hashChange pour déclencher des changements sur une page donnée. Cependant, les hachages ont des comportements par défaut qui ne m'intéressent pas nécessairement, comme le fait de faire passer la page à un point donné (parfois insignifiant).Existe-t-il un événement comme hashchange pour les chaînes de requête?

Je me sens comme l'obtention/réglage d'une chaîne de requête serait plus logique, mais:

  1. est-il?

  2. Y at-il un événement que je peux écouter lorsque la chaîne de requête est définie?

  3. Y at-il des comportements liés à la chaîne de requête que je devrais connaître?

Répondre

1
  1. Il est illogique de réinventer le comportement d'ancrage. Il est préférable de ne pas exposer les liens de hachage à des fragments insignifiants (bien que les navigateurs modernes font scrollIntoView() pour tout élément avec id, il existe un comportement dédié pour <a name="xxx">). Donc, la réponse est oui ici, les arguments de la page doivent être passés via querystring.
  2. événement est window.beforeunload, oui, quand la page reload javascript:void(location.search='some') a été mis
  3. Il n'y a pas de surprise, ont une look

En outre, sur le travail avec querystring: http://xkr.us/js/querystring

1

Cela dépend de ce que vous faites.

Une modification de chaîne de requête déclenchera toujours un rechargement de page. La seule partie de l'URL que vous pouvez modifier sans recharger la page est le # -part.

Dans les applications javascript, les chargements de page ne sont généralement pas corrects. Mais il peut être possible d'utiliser lorsque vous avez un modèle de requête/réponse de page html traditionnel.

Il n'y a pas d'événement AFAIK, car il va changer de page.

1

Comme l'indique l'autre réponse, la modification de la chaîne de requête entraîne le rechargement de la page. En ce qui concerne le navigateur, vous serez alors sur une toute nouvelle page.

Il y a des événements qui vont se déclencher quand vous faites cela. L'événement 'beforeunload` va se déclencher, mais il ne sera pas très utile car il se déclenche également lorsque l'utilisateur clique sur un lien ou ferme la fenêtre.

Effectivement l'événement qui se déclenchera si vous changez la chaîne de requête sera l'événement de chargement sur la nouvelle page qu'il charge.