Подтвердить что ты не робот

Как преодолеть эту проблему безопасности

Я реализовал ajax-опрос script, который вызывает действие в контроллере сервера каждые 10 секунд. С ответом я заменяю содержимое div:

function getFoo() {
    var link = '/Secure/GetFoo';

    $.post(link, function (response) {
        $('#FooSection').replaceWith(response);
    });

    setTimeout("getFoo();", 10000);
}

Это делается через https. После некоторого времени "бездействия" IE отображает следующее сообщение:

Эта страница обращается к информации который не находится под его контролем. Эта представляет угрозу безопасности. хотите ли вы продолжить?

Если пользователь нажимает "Да", страница перенаправляется на div, отображая только ответ. Если пользователь нажимает "Нет", ничего не происходит, но контейнер div не обновляется.

Я знаю Я могу подавить это сообщение через настройки браузера, но это просто приведет меня к выбору по умолчанию Да в соответствии с приведенным выше диалоговым окном.

Аналогичная проблема была перед, но, к сожалению, решения не было. Я в основном хочу, чтобы мой айакс-опрос работал даже при безопасном соединении. Любые идеи?

4b9b3361

Ответ 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';