Как преодолеть эту проблему безопасности
Я реализовал ajax-опрос script, который вызывает действие в контроллере сервера каждые 10 секунд. С ответом я заменяю содержимое div
:
function getFoo() {
var link = '/Secure/GetFoo';
$.post(link, function (response) {
$('#FooSection').replaceWith(response);
});
setTimeout("getFoo();", 10000);
}
Это делается через https. После некоторого времени "бездействия" IE отображает следующее сообщение:
Эта страница обращается к информации который не находится под его контролем. Эта представляет угрозу безопасности. хотите ли вы продолжить?
Если пользователь нажимает "Да", страница перенаправляется на div
, отображая только ответ. Если пользователь нажимает "Нет", ничего не происходит, но контейнер div
не обновляется.
Я знаю Я могу подавить это сообщение через настройки браузера, но это просто приведет меня к выбору по умолчанию Да в соответствии с приведенным выше диалоговым окном.
Аналогичная проблема была перед, но, к сожалению, решения не было. Я в основном хочу, чтобы мой айакс-опрос работал даже при безопасном соединении. Любые идеи?
Ответы
Ответ 1
Вы никогда не должны видеть этот диалог на странице интернет-зоны. По умолчанию эта операция тихо и автоматически блокируется в интернет-зоне.
В зоне интрасети есть два основных причины появления этого диалогового окна:
1 > Попытка выполнить запрос перекрестного происхождения с использованием объекта XMLHTTPRequest (http://blogs.msdn.com/b/ieinternals/archive/2011/04/22/ie-security-prompt-page-accessing- кросс-домен-информации не-под-ее-control.aspx)
2 > Попытка перемещения объекта OBJECT Tag с HTML на страницу перекрестного происхождения.
Вы можете избежать случая # 1, используя XDomainRequest вместо XMLHTTPRequest.
Вы можете избежать случая №2 с помощью IFRAME вместо тега OBJECT.
Ответ 2
На днях я столкнулся с подобной проблемой, не имея возможности узнать, почему IE будет жаловаться после запроса AJAX.
Я использовал пул Firebug net и просто просматривал запросы один за другим, пока не нашел тот, который был http://вместо https://, я предлагаю вам сделать то же самое - нам будет почти невозможно отлаживайте это, не видя страницы, но это может быть что-то меньшее, чем фоновое изображение, которое не загружается через https.
Примечание:
Я заметил, что вы сказали, что это IE, но такая проблема, вероятно, не будет специфичной для браузера, Firefox/Chrome просто не делает ту же самую суету, что в ней есть не https-элементы, как IE.
Ответ 3
В вашем коде две вещи:
Почему вы используете запрос POST ajax? почему бы не ПОЛУЧИТЬ?
Ваш запрос выглядит как запрос GET (вы хотите получить некоторые данные), поэтому метод GET, вероятно, лучший выбор.
Он не связан с вашей проблемой, но вы не должны использовать setTimeout со строкой для eval. Вы должны дать setTimeout переменную как первый аргумент, и эта переменная должна быть функцией, которую вы хотите выполнить.
function getFoo() {
var link = '/Secure/GetFoo';
$.get(link, function (response) {
$('#FooSection').replaceWith(response);
});
window.setTimeout(getFoo, 10000);
}
Ответ 4
Пробовали ли вы использовать гиперссылки, связанные с протоколом (//something.com/image.png
)? См. эту ссылку или этот.
Ответ 5
Если есть один элемент, чей атрибут src начинается с "http" вместо "https" в вашем коде, IE покажет это сообщение.
Вы уверены, что данные, которые вы извлекаете, не имеют элементов, которые имеют src= "http://..." в их атрибуте src?
Ответ 6
Я видел это раньше, потому что новое содержимое, вставленное через вызов ajax, имело ссылки на ни одно защищенное изображение, никаких шансов, что это проблема, которую вы видите?
Ответ 7
Вы пытались использовать абсолютный URL?
var link = 'https://www.yourdomain.com/Secure/GetFoo';