Me encuentro con problemas de política del mismo origen en Javascript. He leído sobre una solución para esto usando la variable document.domain
, pero no puedo hacer que la solución funcione. La solución consiste en que se supone que puede establecer document.domain
en 'example.com'
, de modo que si ejecuta el código desde foo.example.com
, puede cargar datos a través de XHR desde bar.example.com
.Solución de política del mismo origen que utiliza document.domain en Javascript
detalles sobre la solución está aquí:
https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript
Mi ejemplo de código - que no produce los resultados deseados - se ejecuta desde una URL como http://foo.example.com/
:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<script>
document.domain = 'example.com';
window.onload = function() {
var req = new XMLHttpRequest();
var url = 'http://bar.example.com/';
req.open('GET', url, true);
req.onreadystatechange = function (aEvt) {
if (req.readyState == 4) {
var elem = document.getElementById('result');
if (req.status == 200) {
var data = req.responseText;
} else {
var data = "Error loading page: " + req.status;
}
elem.innerHTML = data;
}
};
req.send(null);
};
</script>
Result:<hr>
<div id="result"></div>
</body>
</html>
La salida de este código:
Result: Error loading page: 0
Si cambio url
a 'http://foo.example.com/'
, todo funciona correctamente. ¿Hay algún error en mi código de ejemplo?
No quiero usar un proxy porque son más lentos, menos eficientes y aumentarán el tráfico en nuestro servidor web. Sería genial si esta solución funcionara realmente. ¿Es esta solución "pastel en el cielo"?
Gracias j0rd4n, este es exactamente el tipo de solución no proxy que estaba buscando, incluso si estaba ladrando el árbol equivocado con document.domain. Encontré un poco más de información sobre el esquema que ellos llaman JSONP y cómo jQuery también tiene incorporada esta funcionalidad, que está fuera del alcance de mi pregunta, pero no obstante es interesante: http://www.ibm.com/developerworks/library/wa-aj-jsonp1/ – Rubix
El proceso que menciono usa JSONP pero lo hace en un sentido manual. jquery se encargará de la "recepción" de JSONP en el DOM de JavaScript, pero aún debe proporcionar un servicio que devuelva el texto JSONP. Al final del día, su página de servidor debe devolver JSONP formateado. Su JavaScript (ya sea jquery, ext-js, etc.) debe realizar la llamada para ejecutar el script dentro de una etiqueta de script. –