Обнаружьте, когда iframe является междоменным, затем арестуйте из него

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

iframe имеет onload событие, которое запущено каждый раз, когда новая страница загружается, междоменная или нет.

<iframe id="testframe" src="http://mysite.com" onload="testframe_loaded()"></iframe>

Каждый раз, когда событие запущено, я ищу некоторый путь к:

A) Обнаружьте, когда пользователь перейдет к другому домену

B) Промах из iframe.

Я подозреваю, что B не возможен, так как браузеры не предоставляют доступ к

document.getElementById("testframe").contentDocument.location.href

когда iframe является междоменным. Я также не уверен, возможен ли A.

Если у кого-либо есть идеи относительно того, как выполнить это или положителен, что это не может быть сделано, я ценил бы совет.

Спасибо

12
задан rook 2 March 2010 в 19:04
поделиться

2 ответа

Вы можете сделать A, так как если вы получите ошибку безопасности (которую вы можете поймать), это означает, что они кросс-доменные :) Затем вы можете изменить размер iframe, чтобы он занимал всю страницу. Но я думаю, вы правы, что вы не можете фактически вырваться, без явного сотрудничества со стороны другого домена.

EDIT: Вы правы, что вам не нужно опрашивать. Вот основной код:

<html>
<head>
<title>Cross-domain frame test</title>
<!-- http://stackoverflow.com/questions/2365822/detect-when-iframe-is-cross-domain-then-bust-out-of-it/2365853#2365853 -->
<script type="text/javascript">
function checkForCross()
{
  var iframe = document.getElementById("myFrame");
  try
  {
    var loc = iframe.contentDocument.location.href;
  } catch(e)
  {
    iframe.setAttribute("style", "border: 0; margin: 0; padding: 0; height: 100%; width: 100%;");
  }
}
</script>
</head>
<body>
<iframe name="myFrame" id="myFrame" src="child.html" style="height: 50%; width: 50%;" onload="checkForCross()"></iframe>
</body>
</html>
8
ответ дан 2 December 2019 в 22:05
поделиться

установите атрибут 'target' для внешних ссылок на '_top'.

2
ответ дан 2 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: