Bien tengo el siguiente problema, tengo una pagina que carga clickando en un Menu contenido en un DIV (tambien paginas formulario que envian datos por POST) a traves de Ajax, incluido funciones Javascript gracias al post de MaBoRaK, el problema es que en Firefox y Safari funciona Ok pero en Chrome no reconoce las llamadas a Javascript (por ejemplo Alert("Prueba");), tampoco me funciona en ningun navegador una de mis paginas que tiene un mapa de Google Maps (si llamo en la barra de direcciones directamente a la pagina que contiene Google Maps si lo carga), el codigo:
Funciones.js:
Código Javascript
:
Ver original// Interpretador de codigo de ajax para reconocer funciones Javascript
var tagScript = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
/**
* Eval script fragment
* @return String
*/
String.prototype.evalScript = function()
{
return (this.match(new RegExp(tagScript, 'img')) || []).evalScript();
};
/**
* strip script fragment
* @return String
*/
String.prototype.stripScript = function()
{
return this.replace(new RegExp(tagScript, 'img'), '');
};
/**
* extract script fragment
* @return String
*/
String.prototype.extractScript = function()
{
var matchAll = new RegExp(tagScript, 'img');
return (this.match(matchAll) || []);
};
/**
* Eval scripts
* @return String
*/
Array.prototype.evalScript = function(extracted)
{
var s=this.map(function(sr){
var sc=(sr.match(new RegExp(tagScript, 'im')) || ['', ''])[1];
if(window.execScript){
window.execScript(tagScript);
}
else
{
window.setTimeout(sc,0);
}
});
return true;
};
/**
* Map array elements
* @param {Function} fun
* @return Function
*/
Array.prototype.map = function(fun)
{
if(typeof fun!=="function"){return false;}
var i = 0, l = this.length;
for(i=0;i<l;i++)
{
fun(this[i]);
}
return true;
};
function ajaxFunction() {
var xmlHttp;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
return xmlHttp;
} catch (e) {
// Internet Explorer
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
return xmlHttp;
} catch (e) {
try {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
return xmlHttp;
} catch (e) {
alert("¡Tu navegador no soporta AJAX!");
return false;
}}}
}
function Cargar(url,target) {
var ajax = ajaxFunction();
ajax.open("POST", url, true);
ajax.onreadystatechange = function() {
if (ajax.readyState == 4){
var scs = ajax.responseText.extractScript(); //capturamos los scripts
document.getElementById (target).innerHTML = ajax.responseText.stripScript(); //eliminamos los scripts... ya son innecesarios
scs.evalScript();
}
}
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.send(null);
}
function EnviarForm(_pagina,seccion,formid,capa) {
var ajax = ajaxFunction();
var Formulario = document.getElementById(formid);
var longitudFormulario = Formulario.elements.length;
var cadenaFormulario = "";
var sepCampos = "";
for (var i=0; i <= Formulario.elements.length-1;i++) {
cadenaFormulario += sepCampos+Formulario.elements[i].name+'='+encodeURI(Formulario.elements[i].value);
sepCampos="&";
}
ajax.open("POST", _pagina, true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function() {
if (ajax.readyState==1){
document.getElementById(capa).innerHTML = "<img src='../Imagenes/loader.gif' align='center' /> Cargando...";
}
if (ajax.readyState == 4) {
var scs = ajax.responseText.extractScript(); //capturamos los scripts
document.getElementById (capa).innerHTML = ajax.responseText.stripScript(); //eliminamos los scripts... ya son innecesarios
scs.evalScript();
}
}
ajax.send(cadenaFormulario+"&"+seccion);
}
En la pagina Index.php cargo Funciones.js y el menu que funciona con Ajax, estas son algunas de las paginas que cargo en el DIV contenido:
Google.php:
Código PHP:
Ver original<script src="http://maps.google.com/maps?file=api&v=2&sensor=true_or_false&key=KEY" type="text/javascript"></script>
<script type="text/javascript">
var mapa;
var gdir;
var geocoder = null;
var addressMarker;
function cargarMapa() {
if (GBrowserIsCompatible()) {
mapa = new GMap2(document.getElementById("mapa_ruta"));
// escribe las indiciaciones de la ruta a seguir
gdir = new GDirections(mapa, document.getElementById(""));
//variable que almacena el centro del mapa inicial
var centro = new GLatLng(41.282451,-4.107685);
alert("Dentro"); // este alert NO funciona bien
//controles de zoom
mapa.addControl(new GSmallMapControl());
//controles tipo mapa: plano, satelite o hibrido
mapa.addControl(new GMapTypeControl());
//lo que vemos inicialmente en el mapa
mapa.setCenter(centro, 9);
//impide que el usuario desplace el mapa
// mapa.disableDragging();
//variable que almacena la posicion de la marca
var pos_marca = new GLatLng(40.944477006541554, -4.116225242614746);
//marca roja
var marca = new GMarker(pos_marca);
//añadimos la marca al mapa
mapa.addOverlay(marca);
//añadimos un comentario en la marca
var comentario = "Comentario";
GEvent.addListener(marca,"click", function() {
marca.openInfoWindowTabsHtml(comentario);
});
//carga los datos de tiempo y distancia de la ruta
GEvent.addListener(gdir, "load", onGDirectionsLoad);
//funcion que muestra mensajes en caso de error
GEvent.addListener(gdir, "error", mostrarError);
} // fin if
} // fin Cargar_Mapa
</script>
.. aqui hay codigo HTML...
<div id="mapa_ruta" style="width: 650px; height: 400px;"><img src="Imagenes/loader.gif"></div>
<script>
cargarMapa();
alert("abajo"); // este alert funciona bien salvo en Chrome
</script>
Formulario.php:
Código PHP:
Ver original<link type
="text/css" rel
="stylesheet" href
="CSS/formulario.css">
<!-- Formulario -->
<form name="form" id="form" action="#" method="post">
...Campos del Formulario...
<input name="insertar" id="insertar" value="Insertar" type="button" onclick="EnviarForm('procesarForm.php','c=3','form','contenido');">
</form>
<script>
alert('holaaaaaa');
</script>
¿alguien sabe como solucionarlo para que funcionen los Javascript en todos los navegadores?
¿alguien sabe como hacer para que se cargue el mapa de Google Maps por medio de Ajax?