Обнаружение, если страница находится в пределах iframe - serveride

Как я могу определить серверную (С#, asp.net mvc), если загруженная страница находится в пределах iframe? Благодаря

Ответы

Ответ 1

Однако это невозможно.

<iframe src="mypage?iframe=yes"></iframe>

а затем проверить serveride, если в querystring содержится iframe = yes или с заголовком Referer, отправленным браузером.

Ответ 2

Используйте следующий код внутри формы:

<asp:HiddenField ID="hfIsInIframe" runat="server" />
<script type="text/javascript">
    var isInIFrame = (self != top);
    $('#<%= hfIsInIframe.ClientID %>').val(isInIFrame);
</script>

Затем вы можете легко проверить, если это iFrame в коде:

bool bIsInIFrame = (hfIsInIframe.Value == "true");

Протестировано и сработало для меня.

Изменить: Обратите внимание, что для запуска моего кода выше требуется jQuery. Чтобы запустить его без jQuery, просто используйте код, например следующий (непроверенный) код, чтобы установить значение скрытого поля:

document.getElementById('<%= hfIsInIframe.ClientID %>').value = isInIFrame;

Изменить 2: Это работает только при загрузке страницы один раз. Если у кого-то есть идея улучшить это, дайте мне знать. В моем случае мне, к счастью, нужно только значение после обратной передачи.

Ответ 3

Нет способа проверить это, которое будет соответствовать вашему требованию "безопасно", как указано в вашем комментарии к ответу @WTP.

Ответ 4

Я не думаю, что серверная сторона может это сделать, так почему бы не поместить скрытый элемент управления на свою страницу, которая будет в iframe? Когда URL-адрес в iframe загружается, вы можете добавить код на стороне клиента, чтобы установить скрытый ввод, чтобы указать, что вы находитесь в iframe. Простейшая проверка будет на стороне клиента в методе onload, например:

// Set hidden input
someHiddenInput.value = self != top

Он более безопасен, чем запрос, но он все равно может быть недостаточно для вас.

Мои 2 цента.