Foros del Web » Programando para Internet » Javascript »

¿Cómo comparto en facebook contenido ajax?

Estas en el tema de ¿Cómo comparto en facebook contenido ajax? en el foro de Javascript en Foros del Web. Hola amigos, resulta que mi web tiene la diferentes secciones cargadas mediante ajax. Me gustaría por ejemplo compartir la sección contacto en facebook, pero no ...
  #1 (permalink)  
Antiguo 30/07/2015, 16:35
Avatar de Luisa29  
Fecha de Ingreso: enero-2013
Mensajes: 193
Antigüedad: 11 años, 3 meses
Puntos: 4
Pregunta ¿Cómo comparto en facebook contenido ajax?

Hola amigos, resulta que mi web tiene la diferentes secciones cargadas mediante ajax. Me gustaría por ejemplo compartir la sección contacto en facebook, pero no hay forma de hacerlo ya que siempre se comparte la principal.

Las url de mi web cuando carga contenido ajax son así:

www.example.com/#contacto

El botón que carga contenido ajax:

<a href="#contacto" onClick="cargarbio('ficha.php','contenido-texto')">CONTACTO</a>

Mi código ajax:

Código:
     function nuevoAjax(){
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

// Función para cargar los contenidos de forma asíncrona.
// + pagina: fichero cuyo contenido queremos cargar.
// + identidicador del elemento en el que se cargará el nuevo contenido.
function cargarbio(pagina,destino){
var contenedor;
var ajax;

contenedor = document.getElementById(destino);
ajax = nuevoAjax();
ajax.open("GET", pagina, true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
contenedor.innerHTML = ajax.responseText;



//do Ajaxy stuff here to insert new content into hidden div 'foo' FUN

FB.XFBML.parse(document.getElementById('contenido-texto'), function() {        
    document.getElementById('yourContent').innerHTML += document.getElementById('contenido-texto').innerHTML;
});
//FUN


}
}
ajax.send(null);
}
¿Alguien me puede echar una mano? También necesito las url para poder colocar botones de redes sociales y cajas de comentarios en las diferentes secciones.
  #2 (permalink)  
Antiguo 31/07/2015, 03:35
Avatar de Luisa29  
Fecha de Ingreso: enero-2013
Mensajes: 193
Antigüedad: 11 años, 3 meses
Puntos: 4
Respuesta: ¿Cómo comparto en facebook contenido ajax?

Os pregunto, si realizo una copia de cada página php de mi sitio con el contenido ajax ya cargado, o sea una web html estática con su title metas y esas cosas se puede usar para los botones like y caja de comentarios dicha url para mostrarla en la web dinámica de ajax. ¿Es viable hacer esto o es una locura?

Por ejemplo, www.example.com/#contacto tendría una copia estática que sería www.example.com/contacto con todo el contenido ya cargado.
  #3 (permalink)  
Antiguo 31/07/2015, 07:36
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: ¿Cómo comparto en facebook contenido ajax?

Quizá sería bueno reconsiderar la organización de la página y aplicar las nuevas funcionalidades de historial de html5:
https://moz.com/blog/create-crawlabl...sing-pushstate
  #4 (permalink)  
Antiguo 31/07/2015, 14:52
Avatar de Luisa29  
Fecha de Ingreso: enero-2013
Mensajes: 193
Antigüedad: 11 años, 3 meses
Puntos: 4
Respuesta: ¿Cómo comparto en facebook contenido ajax?

Cita:
Iniciado por Panino5001 Ver Mensaje
Quizá sería bueno reconsiderar la organización de la página y aplicar las nuevas funcionalidades de historial de html5:
https://moz.com/blog/create-crawlabl...sing-pushstate
¿Se idexa bien eso con Google? ¿es mejor para SEO? y otra pregunta, ¿cómo comparto contenido en facebook? necesitaría incluir las metatags de facebook para compartir contenido:
Código:
<meta property="og:title" content="My website"/>
<meta property="og:image" content="http://www.example.com/facebook/road.jpg"/>
<meta property="og:site_name" content="Website"/>
<meta property="og:type" content="website" />
<meta property="og:url" content="http://www.example.com/" />
Panino5001 a ver si me puedes decir que sistema usa esta web, creo que usa ajax y carga el contenido dinámico, lo extraño es que cada url tiene en su código fuente metatags distintas.

http://royalbloodband.com

Última edición por Luisa29; 31/07/2015 a las 15:24
  #5 (permalink)  
Antiguo 01/08/2015, 05:18
Avatar de Luisa29  
Fecha de Ingreso: enero-2013
Mensajes: 193
Antigüedad: 11 años, 3 meses
Puntos: 4
Respuesta: ¿Cómo comparto en facebook contenido ajax?

Llevo intentando un rato lo de implementar el history.pushState pero no doy con la tecla. estoy un poco pegada con todo esto, aquí mi código:

Código:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' type='text/javascript'/></script>

  <script>
  
  
  
function cargar(div, desde)

{
     $(div).load(desde, function() {
		 
});	 
}


</script>
</head>

<body>

<div id="botones">
<ul class="menu-galeria">
 <li><a href="#1" onClick="cargar('#cambia','1.php')">CAMBIO 1</a></li>
     <li><a href="#2" onClick="cargar('#cambia','2.php')">CAMBIO 2</a></li>
     </ul>
</div>


<div id="cambia">
Hola cambio
</div>


</body>
</html>
A ver si me podéis dar una idea de como empezar.
  #6 (permalink)  
Antiguo 01/08/2015, 11:23
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: ¿Cómo comparto en facebook contenido ajax?

Esa página tiene una estructura de directorios que replica los enlaces que carga vía AJAX.
Para simplificar, voy a mostrarte un ejemplo con pushstate y hash, así no es necesario trabajar con directorios, que es más complejo de explicar y entender. El ejemplo podés verlo online aquí: http://disegnocentell.com.ar/ejemplo/
Vamos a trabajar con un index.html que cargará las páginas uno.html, dos.html y tres.html, y vamos a imaginar que tres.html es la que querés compartir.

index.html tendrá todas las funciones de carga vía AJAX:
Código:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>ejemplo</title>
<style>
*{padding:0; margin:0}
ul{ padding-left:20px}
li{ cursor:pointer; list-style:none;display:inline-block; padding:3px 10px; background:#CCC; margin-right:5px}
li:hover,.active{ background:#666}
#contenido{ color:red; padding:20px}
#btcompartir{ color:#FFF; background:#4862A3; padding:5px; width:200px; text-align:center; margin-top:20px}
</style>
<script>
function http(){
	if(typeof window.XMLHttpRequest!='undefined'){
		return new XMLHttpRequest();	
	}else{
		try{
			return new ActiveXObject('Microsoft.XMLHTTP');
		}catch(e){
			alert('Su navegador no soporta AJAX');
			return false;
		}	
	}	
}
function request(url,params,callback){
	var H=new http();
	if(!H)return;
	var p='';
	for(var i in params){
		p+='&'+i+'='+escape(params[i]);	
	}
	H.open('get',url+'?'+p+'&'+Math.random(),true);
	H.onreadystatechange=function(){
		if(H.readyState==4 && H.status == 200){
			if(callback)callback(H.responseText);
			H.onreadystatechange=function(){}
			H.abort();
			H=null;
		}
	}
	H.send(null);
}
function $(x){
	return document.getElementById(x);
}
function loadPage(cual){
	request(
			cual+'.html',
			{},
			function(r){
                                $('uno').className=$('dos').className=$('tres').className='';
				$('contenido').innerHTML=r;
				history.pushState(null, 'titulo de '+cual, '#'+cual);
				$(cual).className='active';
			}
	);
}
onload=onpopstate=function(){
	if(location.hash.indexOf('dos')!=-1  ){
		loadPage('dos');
	}else if(location.hash.indexOf('tres')!=-1  ){
		loadPage('tres');
	}else{
		loadPage('uno');//index
	}
}

</script>
</head>

<body>
<ul id="menu">
<li id="uno" onClick="loadPage('uno')">uno</li> <li id="dos" onClick="loadPage('dos')">dos</li> <li id="tres"  onclick="loadPage('tres')">tres</li>
</ul>
<div id="contenido"></div>
</body>
</html>
Es bastante simple el código: durante la carga de la página o cuando se altera la url, se analiza si la url explicita que se deba cargar una sección. Si no explicita nada, se carga la sección por defecto. La función que carga la página, lo hace vía AJAX e ingresa una entrada en el historial con pushState.
Las páginas uno.html y dos.html son prácticamente iguales: solo contienen las palabras uno y dos respectivamente.
La página tres.html tiene, además de la plabra tres, un botón para compartir:
Código:
tres<br />
<div id="btcompartir" onclick=" window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent('http://www.disegnocentell.com.ar/ejemplo/compartir.html'),'sharer','toolbar=0,status=0,width=760,height=636,scrollbars=yes');">compartir esta secci&oacute;n</div>
El botón de compartir le pasa a la api de Facebook la ruta absoluta de la página a compartir. La página de compartir se llama compartir.html y sólo tiene datos para que lea el robot de Facebook y un redireccionamiento a la url a la que queremos que se redirija al usuario desde el post de Facebook. Ese redireccionamiento, en nuestro caso es a la página que carga el contenido de tres.html, que es nuestro index con el hash tres en la url.
compartir.html:
Código:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:og="http://ogp.me/ns#"
xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>El título</title>
<meta name="title" content="lo que sea" />
<meta name="description" content="lo que sea" />
<link rel="image_src" href="http://royalbloodband.com/cdn/_graphics/mceuploads/news/RB_PreOrderPack.jpg" />
<meta property="og:title" content="lo que sea" /> 
<meta property="og:description" content="lo que sea"/> 
<meta property="og:image" content="http://royalbloodband.com/cdn/_graphics/mceuploads/news/RB_PreOrderPack.jpg" />
<meta property="og:type" content="website"/>
<meta property="og:url" content="http://www.disegnocentell.com.ar/ejemplo/compartir.html"/>
<meta property="og:site_name" content="lo que sea"/>
</head>
<body>
<script>top.location='http://www.disegnocentell.com.ar/ejemplo/#tres';</script>
</body>
</html>
Eso sería todo :)

Última edición por Panino5001; 02/08/2015 a las 07:21
  #7 (permalink)  
Antiguo 01/08/2015, 13:37
Avatar de Luisa29  
Fecha de Ingreso: enero-2013
Mensajes: 193
Antigüedad: 11 años, 3 meses
Puntos: 4
Respuesta: ¿Cómo comparto en facebook contenido ajax?

Panino5001 funciona a la perfección, OLE OLE OLE le he añadido el

Código:
		FB.XFBML.parse(document.getElementById('contenido'), function() {        
    document.getElementById('yourContent').innerHTML += document.getElementById('contenido').innerHTML;
});
Para que cargue comentarios y botón de likes en las páginas y va de lujo.

Pero ahora tengo un par de pequeñas dudas, hay un contenido dinámico que me gustaría que cargase, usa javascript para funcionar, antes con el antiguo código lo hacía funcionar así:

Código:
$.getScript( "jquery.min.js", function( data, textStatus, jqxhr ) {
  console.log( data ); // Data returned
  console.log( textStatus ); // Success
  console.log( jqxhr.status ); // 200
  console.log( "Load was performed." );
});
$.getScript( "jquery.cycle.all.js", function( data, textStatus, jqxhr ) {
  console.log( data ); // Data returned
  console.log( textStatus ); // Success
  console.log( jqxhr.status ); // 200
  console.log( "Load was performed." );
});
$.getScript( "codigo-slider.js", function( data, textStatus, jqxhr ) {
  console.log( data ); // Data returned
  console.log( textStatus ); // Success
  console.log( jqxhr.status ); // 200
  console.log( "Load was performed." );
});



options = $.extend( options || {}, {
    dataType: "script",
    cache: true,
    url: url
  });
  $(document).ready(function(){
   $("#Reload").click(function(){
      $("#result").html("result reloaded successfully");

   });
 
});
Pero ahora no sé como integrarlo.

Y luego otra duda, el plugin de comentarios de fb necesita una url, ¿con las url generadas por el history.pushtate funcionaría? ¿o necesito una url real?

Este es el código del plugin de comentarios de fb:

<div class="fb-comments" data-href="http://www.example.com/" data-width="662" data-num-posts="15"></div>

Muchas gracias por todo y por tu tiempo panino.
  #8 (permalink)  
Antiguo 01/08/2015, 13:41
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Respuesta: ¿Cómo comparto en facebook contenido ajax?

Cita:
Iniciado por Luisa29 Ver Mensaje
Y luego otra duda, el plugin de comentarios de fb necesita una url, ¿con las url generadas por el history.pushtate funcionaría? ¿o necesito una url real?
Si quieres que la URL sea real debes de manejar la carga mediante PHP (o desde el servidor analizar la URL y entregar una u otra cosa). Que de todas formas, en lo que a SEO se refiere, sería una buena práctica.
__________________
(:
  #9 (permalink)  
Antiguo 01/08/2015, 14:12
Avatar de Luisa29  
Fecha de Ingreso: enero-2013
Mensajes: 193
Antigüedad: 11 años, 3 meses
Puntos: 4
Respuesta: ¿Cómo comparto en facebook contenido ajax?

Cita:
Iniciado por pzin Ver Mensaje
Si quieres que la URL sea real debes de manejar la carga mediante PHP (o desde el servidor analizar la URL y entregar una u otra cosa). Que de todas formas, en lo que a SEO se refiere, sería una buena práctica.
Podría ser viable, ¿cómo sería eso? ¿un redireccionamiento? o sea tengo por ejemplo, con las url de panino http://localhost/ejemplo2/#uno que llevaría a la página uno, ¿habría que transformar esa url en otra mediante php?

La web tendría unas 70 páginas, ¿habría que cambiarlas todas no?


EDITO: Pzin, ¿y la solución que planteé al principio de hacer las 70 páginas sin contenido dinámico para usar sus url para comentarios, metas de fb y demás? o sea páginas de contenido estático. En la web con contenido dinámico si le das a compartir algo, compartiría la web de contenido estático que a su vez al entrar en una de estas y pinchar un botón tendría contenido dinámico. Que lío madre de Dios...

Última edición por Luisa29; 01/08/2015 a las 14:20

Etiquetas: contenido, facebook, html, php
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




La zona horaria es GMT -6. Ahora son las 04:30.