Я действительно запутался в этой проблеме. Надеюсь, вы могли бы дать мне несколько советов!
Во-первых, есть тест. html, который размещается на клиентском сервере и с кнопкой. Затем при нажатии кнопки вызывается приведенный ниже код ajax. Будет выведено новое окно.
test. html
$.ajax({
crossDomain: true,
xhrFields: {
withCredentials: true
},
type: 'POST',
url: 'a.com/a.aspx', //the server file
data: 'data=sth',
contentType: "application/x-www-form-urlencoded; charset=utf-8",
dataType: "text",
success: function (data) {
if (win != null) {
if (win.opener == null) {
win.opener = self;
}
win.location.href = data; //return the url of website B
if (win.focus) win.focus();
}
},
error: function (data) {
alert("");
}
});
После этого возвращенные данные перейдут в новое окно на веб-сайт B.
Для вызовов cors ajax я добавил
crossDomain: true,
xhrFields: {
withCredentials: true
}
к тесту . html и
<add name="Access-Control-Allow-Origin" value="//client domain" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Method" value="POST,OPTIONS"/>
<add name="Access-Control-Allow-Credentials" value="true"/>
к серверу web.config
Проблема в том, что в новом окне файлы cookie сбрасываются после перехода на веб-сайт B.
Обновления
win.location.href = 'a.com'; // it works
win.location.href = other domain; // cookies is reset
Я обнаружил, что win.location.href теряет сеанс с кросс-доменом. Как с этим бороться?