Links

Saturday, November 25, 2006

ayuda del botón Back.

Daniel Kantor ha puesto una solución del botón en ejecución Back en Streampad y la ha compartido con nosotros.

Una de las quejas principales contra usos de la tela de AJAX es cómo rompen

botón back en un browser típico. Ha habido algunas soluciones (notablemente historia realmente simple de Neuberg del alfilerillo) pero ninguno lo tiene que trabaja en Safari. GMail todavía no tiene un botón de la parte posteriora del funcionamiento en Safari.
Dicen son la tercera vez el encanto y he intentado conseguir una cosa del botón Back en Streampad dos veces antes. No deseo utilizar a algún otro biblioteca pues son generalmente más compleja que necesito y no deseé poner algo en lugar hasta que tenía funcionamiento Safari . Intenté algunas diversas técnicas, pero cuando lo conseguí que trabajaba en Safari, adaptaría Firefox o IE.
Finalmente calculé hacia fuera una manera de conseguir este funcionamiento en Firefox, IE y Safari. No lo he probado en Opera. Aquí es lo que lo hice. Como de costumbre, tu kilometraje variará muy probablemente.
  1. crear un iFrame con width=’1′, height=’1′, name=’hFrame’, id=’hFrame’ y frameBorder=’0′. Es importante mantenerlo visible en la página o no trabajará en Safari. Puesto que es 1×1 justo, intentar ocultarlo en una esquina o algo.
  2. Crear esta función -
    function historyManager(f,t){
    frames[’hFrame’].location.href=”http://www.streampad.com/historyManFrame.php?f=” +f+”&t=”+t;
    }
    (obviamente substituto en tu dominio para example.com)
  3. Crear esta función -
    function historyFunc(f){
    f = f+”()”;
    eval(f);
    }
  4. Crea una página del php (o cualquier lengua) que acepte dos vars GET - “f” y “t”
  5. Nombrar esta página “historyManFrame”.
  6. En “historyManFrame” puesto éste -
    $f = $_GET[’f'];
    $t = $_GET[’t'];
  7. En cabeza la etiqueta puso dentro de una etiqueta de la escritura -
    function hello(){
    document.title = “Streampad - < ? echo $t; ?>“;
    parent.historyFunc(”< ? echo $f; ?>“);
    }
  8. Y en la etiqueta Body puesta -
    onload=hello()

Ahora qué va a suceder es éste:

  1. Llamar la función historyManager y pasarte dos vars String. f es la función que quisieras en última instancia llamar. t es el título que quisieras hacer que demuestre para arriba en la historia del botón Back.
  2. historyManager va a cargar la página (historyManFrame) en el iframe y a pasarte f y t como variables GET.
  3. historyManFrame ahora va a cargar y a hacer dos cosas. Primero, fijará su propio título a t variable. Después llamará su función historyFunc del padre y pasará en f.
  4. la voluntad historyFunc entonces toma la función f (como secuencia) y eval él (que llame la última función).

Esto es exactamente lo que estoy haciendo adentro

Streampad, y él está trabajando absolutamente bien. Algunas advertencias:
  1. Firefox no exhibirá el título del iframe en la historia del botón Back. Si quisieras, puedes fijar el título principal de la página y ése hará el truco. La razón que no hago esto en Streampad es b/c el título es siempre la canción actual y no deseo cambiar eso.
  2. No paso vars a la última función, así que no la fijé hasta hago esto. Sería realmente fácil hacer algo similar - paso justo en f como “func(’foo’)”. Entonces eval(f) justo en historyFunc en vez de agregar ‘()’ a él antes de' ing eval.

No comments: