Foros del Web » Programando para Internet » Javascript »

[aporte] Cómo mantener la misma url en todas las páginas

Estas en el tema de [aporte] Cómo mantener la misma url en todas las páginas en el foro de Javascript en Foros del Web. Antes de empezar nace la pregunta ¿Y para qué querría yo hacer eso? bueno resulta que en mi trabajo me pidieron si podía lograr ese ...
  #1 (permalink)  
Antiguo 20/09/2011, 03:02
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 5 meses
Puntos: 11
De acuerdo [aporte] Cómo mantener la misma url en todas las páginas

Antes de empezar nace la pregunta ¿Y para qué querría yo hacer eso? bueno resulta que en mi trabajo me pidieron si podía lograr ese efecto para una instalación de Claroline (sistema e-Learning), porque "los usuarios se sentían inseguros al poder cambiar los parámetros de la URL". Es evidente que ocultar la URL no aporta nada de seguridad, sin embargo presenta un reto interesante.

Adicionalmente, la arquitectura permite incrustar una función "persistente al sitio", es decir, cuyo código se ejecuta sólo la primera vez que el usuario ingresa al sitio. El parámetro data de ésta función estará presente durante toda la navegación. Esto podría ser útil para, por ejemplo no cortar una canción cuando uno pase de una página a otra.

A continuación copio el código, y explico y explico cómo usarlo.

Si les interesa explico un poco más en mi blog (recién estrenado )

Código Javascript:
Ver original
  1. /**
  2. * Hace que la url dada por urlBase se mantenga fija en la
  3. * barra del navegador. Adicionalmente, ejecuta la función
  4. * callback si es que se necesita que un script se ejecute
  5. * en segundo plano sin recargarse mientras se navega por
  6. * el sitio.
  7. *
  8. * Copyright 2011, Rodrigo González
  9. * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
  10. * or GPL Version 3 (http://www.opensource.org/licenses/GPL-3.0) licenses.
  11. *
  12. * http://desarrolladorweb.cl/blog/2011/mantener-la-misma-url-con-javascript/
  13. *
  14. * @param string urlBase la url base del sitio. Por ejemplo "http://desarrolladorweb.cl/blog/"
  15. * por omisión toma el valor del protocolo más el dominio. Debe terminar en '/'
  16. * @param function callbackInicio una función javascript a ser ejecutada
  17. * al inicio de la navegación, es decir, en la primera vez que el usuario
  18. * ingresa al sitio.
  19. * @param function callbackCambioPagina una función javascript a ser ejecutada
  20. * cada vez que el usuario cambia de página.
  21. */
  22. function mantenerUrlFija(urlBase, callbackInicio, callbackCambioPagina) {
  23.  
  24. // Variable necesaria para referenciar objetos entre páginas.
  25. top.window.mantenerUrlFija_Data = top.window.mantenerUrlFija_Data || {};
  26.  
  27. // Determinar la url base en el caso de que no
  28. // se haya pasado como parámetro.
  29. urlBase = urlBase || top.location.protocol +'//'+ top.location.host + '/';
  30.  
  31. // En el caso de que la url actual sea distinta a la que se
  32. // debería mostrar, se hace la redirección.
  33. if(top.location.href != urlBase) {
  34. top.location.href = urlBase;
  35. return;
  36. }
  37.  
  38. // El id del iframe.
  39. var ID_IFRAME = '__mantenerUrlFija__';
  40.  
  41. // En el caso de que sea la primera vez que se abre la ventana,
  42. // entonces hay que construir un nuevo documento html y poner dentro
  43. // el iframe dentro del cual se incrusta el contenido de la página.
  44. if(!top.document.getElementById(ID_IFRAME)) {
  45.  
  46. // Los nodos que actualmente están.
  47. var headViejo = document.getElementsByTagName('head')[0];
  48. var bodyViejo = document.getElementsByTagName('body')[0];
  49.  
  50. // Crea el nuevo nodo del head.
  51. var headNuevo = document.createElement('head');
  52.  
  53. // Adjunta el titulo de la pagina.
  54. var tituloPagina = document.createElement('title');
  55. var textoTituloPagina = headViejo.getElementsByTagName('title')[0].firstChild.nodeValue;
  56. tituloPagina.appendChild(document.createTextNode(textoTituloPagina));
  57. headNuevo.appendChild(tituloPagina);
  58.  
  59. // Adjunta las reglas css de estilo de la pagina.
  60. var style = document.createElement('style');
  61. style.type = 'text/css';
  62. var css = 'html{overflow:hidden}';
  63. css += 'html,body,iframe {width: 100%;height: 100%;border:0;margin:0;padding:0}';
  64. css = document.createTextNode(css);
  65. if(style.styleSheet) // IE
  66. style.styleSheet.cssText = css.nodeValue;
  67. else // Navegadores decentes
  68. style.appendChild(css);*
  69. headNuevo.appendChild(style);
  70.  
  71. // Crea el nuevo nodo del body.
  72. var bodyNuevo = document.createElement('body');
  73.  
  74. // El nodo html actual.
  75. var html = document.getElementsByTagName('html')[0];
  76. var htmlPivote = html.cloneNode(true);
  77.  
  78. // Adjunta el iframe.
  79. var iframe = document.createElement('iframe');
  80. iframe.id = ID_IFRAME;
  81. bodyNuevo.appendChild(iframe);
  82.  
  83. // Elimina el nodo head viejo y agrega el nuevo.
  84. html.removeChild(headViejo);
  85. html.appendChild(headNuevo);
  86.  
  87. // Elimina el nodo Body viejo y agrega el nuevo.
  88. html.removeChild(bodyViejo);
  89. html.appendChild(bodyNuevo);
  90.  
  91. // Finalmente, escribir
  92. iframe = document.getElementById(ID_IFRAME);
  93. var documentoIframe = iframe.contentWindow || iframe.contentDocument;
  94. if(documentoIframe.document) documentoIframe = documentoIframe.document;
  95. // curiosamente, htmlPivote.firstChild.nodeValue no funciona...
  96. documentoIframe.write(htmlPivote.innerHTML);
  97. documentoIframe.close();
  98.  
  99. }
  100.  
  101. // Cuando se carga el iframe.
  102. top.document.getElementById(ID_IFRAME).onload = function(){
  103.  
  104. var documentoIframe = this.contentWindow || this.contentDocument;
  105. if(documentoIframe.document) documentoIframe = documentoIframe.document;
  106.  
  107. // Se establecen los target de los enlaces para que operen
  108. // dentro del iframe.
  109. var enlaces = documentoIframe.getElementsByTagName('a');
  110.  
  111. // Crea una expresión regular para el dominio, la primera línea es genérica
  112. // para escapar carácteres propios de una expresión regular.
  113. var expDominio = urlBase.replace(/[-[\]{}()*+?.,\\^$|#\s\/]/g, "\\$&");
  114. expDominio = new RegExp('^' + expDominio);
  115.  
  116. // Para cada enlace, establecer el target _self o _top según corresponda.
  117. for(var i in enlaces)
  118. enlaces[i].target = expDominio.test(enlaces[i].href) ? '_self' : '_top';
  119.  
  120. // Ejecuta la función sólo cuando se ingresa a la primera página de la navegación.
  121. if(callbackInicio && !top.window.mantenerUrlFija_Data_OK) {
  122. top.window.mantenerUrlFija_Data_OK = true;
  123. var c = callbackInicio;
  124. c(documentoIframe, top.window.mantenerUrlFija_Data);
  125. }
  126.  
  127. // Ejecuta la función cada vez que se accede a otra página.
  128. if(callbackCambioPagina) {
  129. var _c = callbackCambioPagina;
  130. _c(documentoIframe, top.window.mantenerUrlFija_Data);
  131. }
  132.  
  133. } // iframe.onload
  134.  
  135. }

Forma de uso
El siguiente código debe ir en el head de cada página, obviamente entre etiquetas script y luego de que cargue el DOM (en el ejemplo utilizo window.onload, pero podría ser de otra forma, por ejemplo, con jQuery)
Código Javascript:
Ver original
  1. window.onload = function(){
  2.  
  3. // Url de la instalación del sitio, la que debe quedar fija.
  4. var urlBase = 'http://www.dominio.tld/dir/';
  5.  
  6. // Llamar a la librería.
  7. mantenerUrlFija(urlBase, function(iframe, data) {
  8. // Agregar el código a ejecutar la primera vez que el usuario ingresa
  9. // al sitio y que se mantenga vigente durante toda la navegación.
  10. // No es muy recomendable para manipular DOM, dado que éste cambia
  11. // al cambiar a otra página. Sin embargo es útil para referenciar variables
  12. // globales a toda la navegación (que no se reinician al cambiar de página).
  13. // En tal caso, utilizar data, por ejemplo: data.segundos = 0;
  14. }, function(iframe, data) {
  15. // Se ejecuta cada vez que se carga la página. Es útil para manipular el
  16. // Dom de la página con los datos del sitio, guardados en data.
  17. });
  18.  
  19. }

En http://desarrolladorweb.cl/blog/2011...on-javascript/ hay un ejemplo funcionando.

Saludos.
__________________
Estreno blog ~ DesarrolladorWeb.cl :)

Etiquetas: url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:33.