2015-04-26 39 views
1

看哪一个简单framebuster:我该如何阻止我的frame buster破坏WordPress Customizer页面?

<script type="text/javascript"> 
    if (top.location != self.location) { 
     top.location = self.location.href; 
    } 
</script> 

但是,它似乎工作也很好。它打破了WordPress中的定制者管理页面,随着您自定义某些设置,网站在一个框架中被预览。我怎样才能修改它,以便它打破框架......但不是那个。

也许你可以:

  1. 检查它是否在同一个域,而不是打破这些框架?
  2. 使用somesort的正则表达式匹配检查特定的定制程序URL?

我很满意这两种解决方案,但我不知道如何让它们发生。任何帮助,将不胜感激。

+1

你能不能具备的条件是'(top.location = self.location &&顶! .location.href!='http://www.example.com/page.html')'... –

+0

这是插件安装在多个网站上,因此无法完成特定网址的检查,因为它们全部有不同的域名。相反,我需要检查该特定页面(wp-admin/customize.php),而没有在字符串中的某个域,我不知道该怎么做。 –

回答

0

显然,top.location有一个名为pathname的字段,其中包含没有域的URL。通过检查该字段,我可以排除该特定的管理页面。

  <script type="text/javascript"> 
      function parentIsEvil(parent) { 
       var html = null; 
       try { 
        var doc = top.location.pathname; 
       } catch(err){ 
        // do nothing 
       } 
       console.log(doc); 
       return(doc != "/wp-admin/customize.php"); 
      } 
      console.log(canAccessParent()); 
      if (top.location != self.location && parentIsEvil()) { 
       top.location = self.location.href; 
      } 
     </script>'; 

更新:我添加了检查跨域和解决任何错误的解决方案。

+1

尼斯:D ...我只是寻找一个正则表达式的解决方案,但你打败了我Lol ...加上你的更清洁:D –

+0

@Stretch一旦我发现“路径名称”字段,这使得生活是一个创建此解决方案更容易。 –

+0

该解决方案可以防止它在该页面上的帧被破坏,但由于跨域错误问题,该解决方案打破了帧的破坏能力。 –

1

您可以使用wp_customize查询ARG和is_user_logged_in功能,如果包裹你的JavaScript在类似这样的语句:

<?php if (! (isset($_GET[ 'wp_customize' ]) && is_user_logged_in())): ?> 
<script type="text/javascript"> 
    if (top.location != self.location) { 
     top.location = self.location.href; 
    } 
</script> 
<?php endif; ?>