Debido a las limitaciones del navegador (política del mismo origen), el tema de dominio cruzado de JavaScript siempre ha sido un problema muy difícil. HTML5 proporciona la función de la transmisión de mensajes de documento cruzado y recibe y envía información entre documentos web. Utilizando esta función, las páginas web no solo pueden comunicarse entre sí, sino solo las páginas web con el mismo origen (dominio + número de puerto), sino que también pueden comunicar el dominio entre dos nombres de dominio diferentes.
Mensaje de documentos Cross Mensajería de documentos cruzados proporciona el método postmessage para aprobar datos entre diferentes documentos web, lo que respalda la mensajería en tiempo real. Muchos navegadores ahora admitirán esta función, como Google Chrome 2.0+, Internet Explorer 8.0+, Firefox 3.0+, Opera 9.6+, Safari 4.0+, etc.
Entonces, ¿qué debo hacer si IE6, IE7 y otros navegadores que no admiten HTML5?
Puede usar el método de ventana. Nombre porque la modificación de Window.Name no implica problemas de dominio cruzado. Aunque no es particularmente ideal de usar, el efecto es aceptable.
Sin embargo, no podemos escribir Window.PostMessage, Window.AddeventListener, Window.ame y otros contenidos cada vez que estamos involucrados en el dominio cruzado.
Con este fin, abstraí todo el proceso de dominio cruzado y lo encapsé en un complemento de JavaScript para resolver el problema de dominio cruzado bidireccional, me realiza la comunicación en tiempo real entre diferentes documentos web y puede realizar una comunicación de dominio cruzado entre dos nombres de dominio diferentes.
Dirección de descarga de demostración: http://xiazai.vevb.com/201501/other/jcrossdomain_v2.rar, versión v2
JavaScript Cross-Dominio Plugin JCrossDomain.js
La copia del código es la siguiente:
(función (win) {
/**
* Sin árboles florecientes
* 2013/12/07 17:12
*/
var _jcd = {
ISITITED: FALSO,
Elmt: falso,
Hash: '',
Delims: ',',
rand: function () {
regreso (nueva fecha) .gettime ()
},
msg: functer () {
alerta ('ADVERTENCIA: debe llamar a la función inicial al principio');
},
init: function (devolución de llamada, Elmt) {
if (_jcd.isinited == verdadero)
devolver;
_jcd.isinited = true;
_jcd.elmt = Elmt;
if (win.postMessage) {
// El navegador admite el método HTML5 PostMessage
if (win.addeventListener) {
// admite navegadores como Firefox, Google, etc.
win.addeventListener ("Mensaje", función (EV) {
callback.call (win, ev.data);
},FALSO);
} else if (win.attachevent) {
// Soporte del navegador IE
win.attachevent ("onMessage", function (ev) {
callback.call (win, ev.data);
});
}
_jcd.msg = function (data) {
_jcd.elmt.PostMessage (datos, '*');
}
}demás{
// El navegador no admite métodos de postmessage HTML5, como IE6 y 7
setInterval (function () {
if (win.name! == _jcd.hash) {
_jcd.hash = win.name;
callback.call (win, _jcd.hash.split (_jcd.delims) [1]);
}
}, 50);
_jcd.msg = function (data) {
_jcd.elmt.name = _jcd.rand () + _jcd.delims + data;
}
}
}
};
var jcd = {
InitParent: function (Callback, iframeId) {
_jcd.init (Callback, document.getElementById (iframeid) .ContentWindow);
},
initchild: function (devolución de llamada) {
_jcd.init (devolución de llamada, win.parent);
},
sendMessage: function (data) {
_jcd.msg (datos);
}
};
win.jcrossdomain = jcd;
})(ventana);
Métodos de llamadas en la página principal:
La copia del código es la siguiente:
// función de devolución de llamada personalizada
var cb = function (msg) {
alerta ("Obtener msg:" + msg);
};
// Inicializar, cargar la función de devolución de llamada e ID de iframe
JCrossDomain.initParent (CB, 'iframea');
// Enviar un mensaje
JCrossDomain.SendMessage ('Hola, niño');
Métodos de llamadas en la subpaga:
La copia del código es la siguiente:
// función de devolución de llamada personalizada
var cb = function (msg) {
alerta ("Obtener msg:" + msg);
};
// Inicializar, cargar la función de devolución de llamada
JCrossDomain.Initchild (CB);
// Enviar un mensaje
jcrossdomain.sendMessage ('Hola, padre');
Consejos de prueba de simulación:
Para lograr la comunicación entre diferentes dominios, se pueden agregar dos nombres de dominio al archivo hosts del sistema operativo para la simulación.
Agregue dos nombres de dominio diferentes al archivo de hosts
127.0.0.1 parent.com
127.0.0.1 Child.com
La evolución de los programadores: