1

シンプルなフレームバスターをご覧ください:

<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次のように、クエリ引数と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 には、ドメインなしの 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 に答える