Из-за ограничений браузера (политика с одинаковым происхождением), междоменная проблема JavaScript всегда была очень сложной проблемой. HTML5 обеспечивает функцию передачи сообщений по междокументию и получает и отправляет информацию между веб-документами. Используя эту функцию, веб-страницы могут не только с тем же одним и одним и тем же первичным (номером домена + портом) общаться друг с другом, но также могут взаимосвязь между доменом между двумя разными доменными именами.
Cross Document Messaging Message Messaging Messaging предоставляет метод Postmessage для передачи данных между различными веб-документами, поддержкой сообщений в реальном времени. Многие браузеры теперь будут поддерживать эту функцию, например, Google Chrome 2.0+, Internet Explorer 8.0+, Firefox 3.0+, Opera 9,6+, Safari 4.0+ и т. Д.
Итак, что мне делать, если IE6, IE7 и другие браузеры, которые не поддерживают HTML5?
Вы можете использовать метод window.name, потому что изменение window.name не связана с проблемами междомена. Хотя это не особенно идеально для использования, эффект приемлем.
Тем не менее, мы не можем написать window.postmessage, window.addeventListener, window.name и другое содержимое каждый раз, когда мы участвуем в кросс-домене.
С этой целью я абстрагировал весь перекрестный процесс и инкапсулировал его в плагин JavaScript для решения двухсторонней междоменной проблемы, реализовать связь между различными веб-документами и может реализовать междоменную связь между двумя разными доменными именами.
Демонстрационный адрес загрузки: http://xiazai.vevb.com/201501/other/jcrossdomain_v2.rar, версия v2
JavaScript Cross-Domain Plugin JcrossDomain.js
Кода -копия выглядит следующим образом:
(function (win) {
/**
* Без цветущих деревьев
* 2013/12/07 17:12
*/
var _jcd = {
Исинируется: ложь,
Элмт: Неверно,
хэш: '',
Деймы: ',',
rand: function () {
return (новая дата) .gettime ()
},
msg: function () {
Alert ('Warning: вы должны сначала вызвать функцию init');
},
init: function (обратный вызов, elmt) {
if (_jcd.isinited == true)
возвращаться;
_jcd.isinited = true;
_jcd.elmt = elmt;
if (win.postmessage) {
// браузер поддерживает метод Postmessage HTML5
if (win.addeventlistener) {
// поддерживает браузеры, такие как Firefox, Google и т. Д.
win.addeventlistener ("Сообщение", Функция (EV) {
callback.call (win, ev.data);
},ЛОЖЬ);
} else if (win.attachevent) {
// Поддержка IE Browser
win.attachevent ("onmessage", function (ev) {
callback.call (win, ev.data);
});
}
_jcd.msg = function (data) {
_jcd.elmt.postmessage (data, '*');
}
}еще{
// Браузер не поддерживает методы Postmessage HTML5, такие как IE6 и 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 (обратный вызов, iframeid) {
_jcd.init (обратный вызов, document.getElementByid (iframeid) .contentWindow);
},
initchild: function (обратный вызов) {
_jcd.init (обратный вызов, win.parent);
},
sendmessage: function (data) {
_jcd.msg (данные);
}
};
win.jcrossdomain = jcd;
})(окно);
Методы вызова на родительской странице:
Кода -копия выглядит следующим образом:
// пользовательская функция обратного вызова
var cb = function (msg) {
Alert ("Get MSG:" + MSG);
};
// Инициализировать, загрузить функцию обратного вызова и идентификатор iframe
jcrossdomain.initparent (cb, 'iframea');
// Отправить сообщение
jcrossdomain.sendmessage («Привет, ребенок»);
Вызов методов на подпаке:
Кода -копия выглядит следующим образом:
// пользовательская функция обратного вызова
var cb = function (msg) {
Alert ("Get MSG:" + MSG);
};
// Инициализировать, загрузить функцию обратного вызова
Jcrossdomain.initchild (CB);
// Отправить сообщение
jcrossdomain.sendmessage ('Привет, родитель');
Советы по тестированию симуляции:
Для достижения связи между различными доменами можно добавить два доменных имена в файл хоста операционной системы для моделирования.
Добавьте два разных доменных имена в файл хостов
127.0.0.1 Parent.com
127.0.0.1 Child.com
Эволюция программистов: