PROBLEMA - STRING EXTERNO AJAX
Publicado por Jonathan (1 intervención) el 25/10/2006 21:43:34
El problema radica que que da un error de javascript al ejecutarse, por trabajar con dos dominios distintos, y que no quiero que aparezca la molesta advertencia de seguridad que sale al cargarse AJAX... Estos dos puntos son imprescindibles, dado que no debe de ser una molestia para el cliente, y si tiene que aceptar una advertencia para que se cargue su pagina, no lograre venderselo. Esto es un sistema de add-server como el de goolge, o ad-brite.
Hay tres formas de publicidad:
1)Publicidad por banner: Que imprime una imagen (banner) envuelta en los tag's <a href></a>. Estos tags los recibe con este formato en un string impreso en el navegador: <a href=url_destino'> <img src='"url_imagen"' ></a>.
2)enlace de texto: Lo mismo pero en lugar de sacar una imagen saca un enlace de texto.
3)Hypervinculo por palabras: Toma de un string separado por palabras una url y varias palabras. primero la url seguida de las palabras. Y debe sustituir esas palabras en la pagina del cliente por un enlace a la url. ejmeplo: recibe"http:// www.miweb.com hola perro casa "y siempre que esas tres palabras aparezcan en el navegador deben salir asi: <a href='http:// www.miweb.com '>casa</a>
Para publicidad por Banner y enlace de Texto uso este código:
function clientSideInclude(id, url) {
var req = false;
if (window.XMLHttpRequest) {
try {
req = new XMLHttpRequest();
} catch (e) {
req = false;
}
} else if (window.ActiveXObject) {
// For Internet Explorer on Windows
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
req = false;
}
}
}
var element = document.getElementById(id);
if (!element) {
alert("Bad id " + id +
"passed to clientSideInclude." +
"You need a div or span element " +
"with this id in your page.");
return;
}
if (req) {
req.open('GET', url, false);
req.send(null);
element.innerHTML = req.responseText;
} else {
element.innerHTML =
"Sorry, your browser does not support " +
"XMLHTTPRequest objects. This page requires " +
"Internet Explorer 5 or better for Windows, " +
"or Firefox for any system, or Safari. Other " +
"compatible browsers may also exist.";
}
}
</script>
Y lo llamo en el body con un:
Onload="clientSideInclude('includeone', ' http://www.mi_url_en_otro_server.php?id=3');"
Esto lo que hace en ambos casos, es llamar a la URL que le paso, la cual imprime en el navegador la publicidad, con formato HTML. Es decir imprime o un banner o un enlace de texto envueltos en la etiqueta <a href=''.></a>. Y después lo sustituye en la parte del HTML donde el cliente haya puesto la etiqueta
<span id='includeone'></span>.
El ultimo de los códigos de publicación, lo que hace es parecido. Llama a esa misma URL en mi Server , y esta imprime en el navegador una cadena de texto separada por espacios, consistente en una URL de destino y varias palabras. El código AJAX le esta cadena, y la divide en un array por donde están los espacios. Y remplaza cada palabra en el HTML del cliente por un link a la URL de destino que recibe.
El código es el siguiente:
<script language="javascript" type="text/javascript">
<!--
function oAjax(){
try{
oAjax = new ActiveXObject("Msxml2.XMLHTTP ");
}
catch(e){
try{
oAjax= new ActiveXObject(" Microsoft.XMLHTTP");
}
catch(E){
oAjax= false;
}
}
if (!oAjax && typeof XMLHttpRequest!='undefined') {
oAjax = new XMLHttpRequest();
}
return oAjax
}
//colocar en el tag body
// onload="fSustituirAjax();"
function fSustituirAjax(){
_oAjax=oAjax()
//id del cliente
_values_send="id=1"
//ruta y pagina que devolvera las variables
_URL_=" http://www.mi-url-en-otro-server/pagina.php?"
_oAjax.open("GET",_URL_+"&"+_values_send,true);
_oAjax.onreadystatechange=function(){
if (_oAjax.readyState==4){
if(_oAjax.status==200){
var sValorDevuelto = _oAjax.responseText;
//aValores[0] debe contener la url, el resto seran las palabras a reemplazar
var aValores = new Array();
aValores = sValorDevuelto.split(" ");
alert(aValores)
var oBody = document.getElementsByTagName("body");
var sNuevoTag = '';
for (var i = 0;i < aValores.length;i++)
{
sNuevoTag = '<b><a href="' + aValores[0] + '">' + aValores[i] + '</a></b>';
oBody[0].innerHTML = oBody[0].innerHTML.replace(aValores[i],sNuevoTag);
}
}
}
}
_oAjax.send(null);
}
</script>
Y se le llama en el body de esta manera:
<body onload="fSustituirAjax(true);">
Esto en local funciona de pm... incluso cnd esta colgado en el server pero ejecutando el script desde mi maquina en local. Pero en cuanto lo ejecutas en otro dominio da el siguiente error:
"Error: uncaught exception: Permiso denegado para llamar el método XMLHttpRequest.open"
Y esta la razón que parece genera el error:
"ese error ocurre porque con un XMLHttpRequest no puedes pedir datos de otro dominio, solo trabajar con el dominio local, es por razones de seguridad."
Y siempre que cargo la pagina del cliente... en local, en el server... dnd sea me da una advertencia de seguridad muy incomoda, que dee de ser aceptada para que muestre la pagina:
"Esta pagina esta intentando el acceso a informacion fuera de su control. Esto presenta un riesgo de seguridad.¿Desea Continuar?"
¿Cómo tengo que hacer para solucionarlo? desde ya muchas graxias...
Hay tres formas de publicidad:
1)Publicidad por banner: Que imprime una imagen (banner) envuelta en los tag's <a href></a>. Estos tags los recibe con este formato en un string impreso en el navegador: <a href=url_destino'> <img src='"url_imagen"' ></a>.
2)enlace de texto: Lo mismo pero en lugar de sacar una imagen saca un enlace de texto.
3)Hypervinculo por palabras: Toma de un string separado por palabras una url y varias palabras. primero la url seguida de las palabras. Y debe sustituir esas palabras en la pagina del cliente por un enlace a la url. ejmeplo: recibe"http:// www.miweb.com hola perro casa "y siempre que esas tres palabras aparezcan en el navegador deben salir asi: <a href='http:// www.miweb.com '>casa</a>
Para publicidad por Banner y enlace de Texto uso este código:
function clientSideInclude(id, url) {
var req = false;
if (window.XMLHttpRequest) {
try {
req = new XMLHttpRequest();
} catch (e) {
req = false;
}
} else if (window.ActiveXObject) {
// For Internet Explorer on Windows
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
req = false;
}
}
}
var element = document.getElementById(id);
if (!element) {
alert("Bad id " + id +
"passed to clientSideInclude." +
"You need a div or span element " +
"with this id in your page.");
return;
}
if (req) {
req.open('GET', url, false);
req.send(null);
element.innerHTML = req.responseText;
} else {
element.innerHTML =
"Sorry, your browser does not support " +
"XMLHTTPRequest objects. This page requires " +
"Internet Explorer 5 or better for Windows, " +
"or Firefox for any system, or Safari. Other " +
"compatible browsers may also exist.";
}
}
</script>
Y lo llamo en el body con un:
Onload="clientSideInclude('includeone', ' http://www.mi_url_en_otro_server.php?id=3');"
Esto lo que hace en ambos casos, es llamar a la URL que le paso, la cual imprime en el navegador la publicidad, con formato HTML. Es decir imprime o un banner o un enlace de texto envueltos en la etiqueta <a href=''.></a>. Y después lo sustituye en la parte del HTML donde el cliente haya puesto la etiqueta
<span id='includeone'></span>.
El ultimo de los códigos de publicación, lo que hace es parecido. Llama a esa misma URL en mi Server , y esta imprime en el navegador una cadena de texto separada por espacios, consistente en una URL de destino y varias palabras. El código AJAX le esta cadena, y la divide en un array por donde están los espacios. Y remplaza cada palabra en el HTML del cliente por un link a la URL de destino que recibe.
El código es el siguiente:
<script language="javascript" type="text/javascript">
<!--
function oAjax(){
try{
oAjax = new ActiveXObject("Msxml2.XMLHTTP ");
}
catch(e){
try{
oAjax= new ActiveXObject(" Microsoft.XMLHTTP");
}
catch(E){
oAjax= false;
}
}
if (!oAjax && typeof XMLHttpRequest!='undefined') {
oAjax = new XMLHttpRequest();
}
return oAjax
}
//colocar en el tag body
// onload="fSustituirAjax();"
function fSustituirAjax(){
_oAjax=oAjax()
//id del cliente
_values_send="id=1"
//ruta y pagina que devolvera las variables
_URL_=" http://www.mi-url-en-otro-server/pagina.php?"
_oAjax.open("GET",_URL_+"&"+_values_send,true);
_oAjax.onreadystatechange=function(){
if (_oAjax.readyState==4){
if(_oAjax.status==200){
var sValorDevuelto = _oAjax.responseText;
//aValores[0] debe contener la url, el resto seran las palabras a reemplazar
var aValores = new Array();
aValores = sValorDevuelto.split(" ");
alert(aValores)
var oBody = document.getElementsByTagName("body");
var sNuevoTag = '';
for (var i = 0;i < aValores.length;i++)
{
sNuevoTag = '<b><a href="' + aValores[0] + '">' + aValores[i] + '</a></b>';
oBody[0].innerHTML = oBody[0].innerHTML.replace(aValores[i],sNuevoTag);
}
}
}
}
_oAjax.send(null);
}
</script>
Y se le llama en el body de esta manera:
<body onload="fSustituirAjax(true);">
Esto en local funciona de pm... incluso cnd esta colgado en el server pero ejecutando el script desde mi maquina en local. Pero en cuanto lo ejecutas en otro dominio da el siguiente error:
"Error: uncaught exception: Permiso denegado para llamar el método XMLHttpRequest.open"
Y esta la razón que parece genera el error:
"ese error ocurre porque con un XMLHttpRequest no puedes pedir datos de otro dominio, solo trabajar con el dominio local, es por razones de seguridad."
Y siempre que cargo la pagina del cliente... en local, en el server... dnd sea me da una advertencia de seguridad muy incomoda, que dee de ser aceptada para que muestre la pagina:
"Esta pagina esta intentando el acceso a informacion fuera de su control. Esto presenta un riesgo de seguridad.¿Desea Continuar?"
¿Cómo tengo que hacer para solucionarlo? desde ya muchas graxias...
Valora esta pregunta


0