1

看一个简单的 framebuster:

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

但是,它似乎工作得太好了。它破坏了 WordPress 中的定制器管理页面,当您自定义某些设置时,网站会在框架中预览。我该如何修改它以使其破坏帧……但不是那个。

也许你可以:

  1. 检查它是否在同一个域上并且不破坏这些框架?
  2. 使用某种正则表达式匹配检查特定的定制程序 URL?

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

4

2 回答 2

1

您可以使用wp_customize查询 arg 和is_user_logged_in函数将 javascript 包装在 if 语句中,如下所示:

<?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; ?>
于 2015-04-26T19:53:54.060 回答
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>';

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

于 2015-04-26T17:50:04.660 回答