not eventos español escuchar javascript jquery html5 dom browser-history

javascript - eventos - attachevent



¿Qué sucede con los eventos de la ventana al cambiar los documentos? (4)

Hola, tengo el siguiente evento statechange establecido en la ventana:

History.Adapter.bind(window,''statechange'',function(e){ console.log("statechange event occured "); //more code var newDoc = document.open(); newDoc.write(file); newDoc.close(); });

Estoy usando history.js pero eso no importa en este caso, ya que ata el statechange regulary, estoy obteniendo el valor de file like should y funciona bien.

Ahora tengo este código (y otro código) dentro de un archivo js externo, dentro del archivo estoy iterando a través de todas las etiquetas y aplico el siguiente evento de clic:

$(element).on("click",function(e){ e.preventDefault(); //more code History.pushState({file : file},title, fullHref); });

Ahora, cuando hago clic en el documento, se modifica como se esperaba, pero cuando intento utilizar los botones statechange / statechange evento de cambio de estado no se statechange .

Debo mencionar que este js está incluido en los archivos que estoy cargando también.

Así que mi pensamiento inicial fue que a medida que el documento cambia pero la ventana no, el evento permanece. lo cual no es cierto ya que aplica los tiempos multiples del evento statechange. Así que traté de aplicar el evento una vez usando cookies, pero eso sigue haciendo lo mismo.

Ahora, si en lugar de cambiar el documento, simplemente lo aplico con jQuerys .html() el evento statechange se activa como se lo esperaba, así que supongo que está relacionado con el documento.

¿Por qué podría suceder esto? Creo que si entendiera más sobre lo que sucede con los eventos de la ventana al cambiar los documentos, podría resolver este problema.

Intentos :

  • Ahora también he intentado enlazar al evento popstate través de la API de Historial regular, aún los mismos resultados dan o toman. pushState no pushState emergente, pero el botón Atrás lo hace, pero sin estado.
  • He llegado a la conclusión de que no debería estar usando history.js ya que sospecho que el problema vino de ahí, así que "resolví" mis problemas con popstate, lo que aún causa problemas ya que document.open parece estar activando popstate. sigue buscando más información
  • He intentado usar, el mismo resultado

Información :

  • el hecho de que este ejemplo usamos History es debido a history.js, si uso el API de historial regular, aún tengo los mismos problemas.

He leído en mdn que:

{{gecko_minversion_note ("1.9.2", "Comenzando con Gecko 1.9.2, document.open () usa el

principal del documento cuyo URI utiliza, en lugar de extraer el principal de la pila. Como resultado, ya no puede llamar a document.write () en un documento no confiable de chrome, incluso utilizando wrappedJSObject. ")}}

Lo cual no estoy seguro, pero creo que podría estar relacionado con este problema


¿Has intentado ligar el elemento con LIVE?

$(element).click(function(e){ e.preventDefault(); //more code History.pushState({file : file},title, fullHref); });

se convierte

$(element).live(''click'',function(e){ e.preventDefault(); //more code History.pushState({file : file},title, fullHref); });


iframe usar iframe para cargar su documento y puede cambiar fácilmente su documento. Luego, puedes escuchar un evento de clic como este,

$("#iframe").load(function () { $(this.contentWindow).click(function () { // do your click events here }); });

El iframe se volverá a cargar si cambia el valor del atributo src como otro documento.


¿Has intentado establecer un objetivo en el método document.open () (ver http://www.w3schools.com/jsref/met_doc_open.asp )? Si no, "en realidad está escribiendo en una ventana en blanco, donde podría estar perdiendo el objeto Historial".


Bueno, al final descubrí que aunque solo cambias el documento, los eventos de la ventana se eliminan a medida que se encuentran dentro del documento.

Compliqué mis problemas con History.js porque creo que el hecho de que los documentos que cambian constantemente lo rompan en algún momento.

Lo que hice fue utilizar la API de historial nativa de HTML5 y volver a popstate evento de estado popstate en el nuevo documento.