2015-02-27 4 views
0
<script type="text/javascript"> 
     if (self === top) { 
      var antiClickjack = document.getElementById("antiClickjack"); 
      antiClickjack.parentNode.removeChild(antiClickjack); 
     } else { 
      top.location = self.location; 
     } 
     </script> 

У меня есть этот код, который не разрешает iframe, но я хочу разрешить iframes только с google.com, как я могу это сделать?if self === top or google.com

Я думаю, что псевдо-код будет if (self === top) or google.com, но не знаете, как это сделать в JavaScript

+0

проверить 'self.location.host' например. 'if (self === top || self.location.host === 'google.com') {}' – pherris

ответ

0

Вы можете проверить имя хоста с top.location.host, как это:

if (self === top || top.location.host === 'google.com') { 
    //good to go 
} 

НО вы не можете изменить расположение верхней, если имена хостов различны:

if (self != top) { 
    document.write('cross domain'); 
} 
if (self.location.hostname !== top.location.hostname) { 
    top.location.href = self.location.href; //throws exception 
} 

Броски:

Uncaught SecurityError: Blocked a frame with origin " http://mbr.domain2.com " from accessing a frame with origin " http://mbr.domain.com ". Protocols, domains, and ports must match.

Итак, я не думаю, что это будет делать то, что вы хотите.

+0

Не будет ли 'self.location' возвращать URL-адрес, где размещается контент, а не откуда iframe включен? 'top.location' может работать, но не уверен, что доступный кадр имеет к нему доступ. –

+0

Да, вы правы - это должно было быть «топ», моя ошибка - позвольте мне дважды проверить. – pherris