Tengo un gran dilema aquí y me gustaría recibir algunas sugerencias de la comunidad. Aquí está mi problema:Identificador de fragmento de procesamiento de PHP en URL
He creado un sitio web que tiene un montón de contenido dinámico, todo el contenido se extrae a través de AJAX y se muestra a través de JS. La forma en que actualmente estoy permitiendo enlaces directos a mi contenido es mediante la modificación del identificador de fragmento sobre la marcha con JS, he aquí un ejemplo:
http://www.mysite.com/home#/123
Donde 123 es el identificador del contenido. Cuando el contenido se cierra, quita el identificador de fragmento nuevamente.
Esto funciona maravillosamente, y cuando la gente carga la página, mi solicitud AJAX está solicitando con éxito el artículo '123'. Pero acabo de implementar un botón similar a Facebook en todos los artículos, y ahora me he topado con un muro de ladrillos.
Básicamente, la manera en que Facebook encuentra qué miniatura y títulos y URL asociar con su contenido 'me gusta' es comprobar las metaetiquetas de la URL pasada al fb como iframe. Lo hace haciendo una solicitud GET en la URL, verificando el contenido de las metaetiquetas y luego exhibiéndolas en Facebook.
El problema es que los identificadores de fragmentos no se pasan al servidor, por lo que no tengo manera en PHP (que yo sepa) de generar dinámicamente estas metaetiquetas con el contenido del artículo solicitado específicamente.
Por ejemplo, yo quería ser capaz de hacer algo como esto:
$id_vals = get_id_values($hash_fragment);
echo '<meta property="og:title" content="'.$id_vals['title'].'" />';
Su primer pensamiento es probablemente: ¿Por qué no utilizar una solicitud GET o cadena de consulta? es decir .:
http://www.mysite.com/home?id=123
Sin embargo, el problema con este enfoque es que Javascript no puede cambiar dinámicamente esta porción de un URL, sólo se puede cambiar el identificador de fragmento. Esto significa que todos los enlaces directos a nuestros artículos requerirán actualizaciones de página. Esto va en contra de todo nuestro enfoque 'dinámico' que tenemos en marcha, lo que podría agregar es realmente bueno :)
Así que estoy un poco perplejo en este momento. La única semi-solución que puedo pensar es usar un enfoque de ambos:
En las solicitudes de tipo fb, utilice los parámetros de obtención y para los enlaces directos utilice el identificador de fragmento.
Pero esto plantea los siguientes problemas:
- Si un enlace directo se pega en Facebook de un usuario que incluirá el identificador de fragmento, y los metadatos correctos no se mostrará en Facebook.
- Tendría que hacer alguna magia de redirección extraña para arreglar el formato de la URL para eliminar la ID (es decir, detectar si se pasa el parámetro GET y redirigir al identificador de fragmento equivalente). Pero no sé si FB también seguiría la redirección y buscaría las metaetiquetas de la página redirigida en lugar de la primera, lo que efectivamente haría que esta solución fuera inútil de todos modos.
¡Perdón por el muro de texto! Apreciar cualquier entrada que pueda proporcionar.
EDIT: Acabo de probar mi solución propuesta que implica una combinación de ambos, y puedo confirmar que Facebook sigue el redireccionamiento, por lo que esta solución no funciona en absoluto. Esto es deprimente!
EDITAR EDITAR: Una posible manera de poner en práctica mi idea 'mezcla' es utilizar un window.location redirigir en lugar de una redirección de llamadas cabecera de PHP(), por lo que Facebook obtiene los meta tags de la página original, para aquellos de ti con un problema similar.
Gracias. función
¿Por qué el Javascript no puede cambiar los parámetros de GET de la URL? –
Deseo que todos los nuevos pósters en SO puedan mostrar la cantidad de esfuerzo e investigación que ha demostrado ... – jprofitt
¡Salud, jprofitt! Scott: Los parámetros GET no son modificables por JavaScript sin causar un redireccionamiento. Window.location trata los identificadores de fragmentos y las cadenas de consulta de forma diferente. – scrapii