Ответ 1
Однако это невозможно.
<iframe src="mypage?iframe=yes"></iframe>
а затем проверить serveride, если в querystring содержится iframe = yes или с заголовком Referer, отправленным браузером.
Как я могу определить серверную (С#, asp.net mvc), если загруженная страница находится в пределах iframe? Благодаря
Однако это невозможно.
<iframe src="mypage?iframe=yes"></iframe>
а затем проверить serveride, если в querystring содержится iframe = yes или с заголовком Referer, отправленным браузером.
Используйте следующий код внутри формы:
<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: Это работает только при загрузке страницы один раз. Если у кого-то есть идея улучшить это, дайте мне знать. В моем случае мне, к счастью, нужно только значение после обратной передачи.
Нет способа проверить это, которое будет соответствовать вашему требованию "безопасно", как указано в вашем комментарии к ответу @WTP.
Я не думаю, что серверная сторона может это сделать, так почему бы не поместить скрытый элемент управления на свою страницу, которая будет в iframe? Когда URL-адрес в iframe загружается, вы можете добавить код на стороне клиента, чтобы установить скрытый ввод, чтобы указать, что вы находитесь в iframe. Простейшая проверка будет на стороне клиента в методе onload, например:
// Set hidden input
someHiddenInput.value = self != top
Он более безопасен, чем запрос, но он все равно может быть недостаточно для вас.
Мои 2 цента.