Links

Saturday, November 25, 2006

appui du bouton Back.

Daniel Kantor a mis en application une solution du bouton Back dans Streampad et l'a partagée avec nous.

Une des rognes principales contre des webapps d'AJAX est comment ils cassent le bouton back dans un navigateur typique. Il y a eu quelques solutions (notamment histoire vraiment simple de Brad Neuberg) mais aucun ne l'a fonctionnant dans Safari. GMail n'a toujours pas un bouton de dos de fonctionnement dans Safari.
Ils disent est la troisième fois le charme et j'ai essayé d'obtenir une chose du bouton Back dans Streampad deux fois avant. Je ne veux pas employer quelqu'un d'autre bibliothèque car ils sont habituellement plus complexes que j'ai besoin et je n'ai pas voulu mettre quelque chose en place jusqu'à ce que j'aie eu le fonctionnement Safari. J'ai essayé quelques différentes techniques, mais quand je l'ai obtenu fonctionnant dans Safari, il enfoncerait Firefox ou IE.
Je finalement ai figuré dehors une manière d'obtenir ce fonctionnement dans Firefox, IE et Safari. Je ne l'ai pas examiné dans Opera. Voici ce que je. Comme d'habitude, votre kilomètrage changera très probablement.

  1. créer un iFrame avec width=’1′, height=’1′, name=’hFrame’, id=’hFrame’ et frameBorder=’0′. Il est important de le maintenir évident à la page ou cela ne fonctionnera pas dans Safari. Puisque c'est 1×1 juste, essayer de le cacher dans un coin ou quelque chose.
  2. Créer cette fonction -
    function historyManager(f,t){
    frames[’hFrame’].location.href=”http://www.streampad.com/historyManFrame.php?f=” +f+”&t=”+t;
    }
    (évidemment produit de remplacement dans votre domaine pour example.com)
  3. Créer cette fonction -
    function historyFunc(f){
    f = f+”()”;
    eval(f);
    }
  4. Crée une page de php (ou quelque langue) qui accepte deux vars GET - “f” et “t”
  5. Nommer cette page “historyManFrame”.
  6. Dans “historyManFrame” mis ceci -
    $f = $_GET[’f'];
    $t = $_GET[’t'];
  7. Dans Head l'étiquette a mis à l'intérieur d'une étiquette Script -
    function hello(){
    document.title = “Streampad - < ? echo $t; ?>“;
    parent.historyFunc(”< ? echo $f; ?>“);
    }
  8. Et dans le corps l'étiquette a mis -
    onload=hello()

Maintenant ce qui va se produire est ceci :

  1. Appeler la fonction historyManager et lui passer deux variables String. f est la fonction que vous voudriez finalement appeler. t est le titre que vous voudriez faire révéler dans l'histoire du bouton Back.
  2. historyManager va charger la page (historyManFrame) dans la trame I et lui passer f et t en tant que variables GET.
  3. historyManFrame va maintenant charger et faire deux choses. D'abord, il placera son propre titre à la variété T. Alors il appellera sa fonction historyFunc de parent et passera dans f.
  4. la volonté historyFunc prennent alors la fonction f (comme corde) et eval il (qui appellera la fonction finale).

Est exactement ce ce qui je fais Streampad intérieur, et cela fonctionne tout à fait bien. Quelques avertissements :

  1. Firefox ne montrera pas le titre de la trame I dans l'histoire du bouton Back. Si vous voudriez, vous pouvez placer le titre principal de page et cela fera le tour. La raison que je ne fais pas ceci dans Streampad est b/c le titre est toujours la chanson courante et je ne veux pas changer cela.
  2. Je ne passe pas des vars à la fonction finale, ainsi je ne l'ai pas placée fais jusqu'à ceci. Il serait vraiment facile de faire n'importe quoi de pareil - passage juste dans f comme “func(’foo’)”. Puis eval(f) juste dans historyFunc au lieu d'ajouter ‘()’ à lui avant l'évaluation.

No comments: