4

可能であれば、iframeを使用して親の子としてfancyboxを開きたいです。

( fancybox で構築された) iframe を開いて、window.open を使用して iframe を開いたとブラウザに信じさせることは可能ですwindow.close()window.opener.location.reload()?

ファンシーボックスのコードはシンプルです:

$("#custom_alert").fancybox({
        'width'             : w,
        'height'            : h,
        'autoScale'         : false,
        'transitionIn'      : 'none',
        'transitionOut'     : 'none',
        'type'              : 'iframe',
        //'scrolling'         : 'no'
    }).trigger('click');

編集:次のような機能は使用できません:

function closePopup(){
     window.close();
     if(parent.jQuery().fancybox) {
      parent.jQuery.fancybox.close();
     }
}

window.close() 関数を使用する必要があります。

私の問題の修正は、アラートや確認で行ったように閉じる機能を書き直すことができない理由を教えてくれることもあります。

EDIT 2: Raohmaru と JFK に感謝します。フィドルが機能するのを確認した後、必要な関数を作成しましたが、(私にとって) 奇妙なことが起こっています:

他の誰かがそれを必要とする場合の作業コードは次のとおりです。

(function() {
  var proxied = window.close;
  window.close = function() {
    if(parent.jQuery().fancybox) {
        parent.jQuery.fancybox.close();
    }
    else
        return proxied.apply(this, arguments);
  };
})();

これは、fancybox と window.open の両方のケースで機能します。

私の問題はこれでした:インデックスにいくつかの.jsファイルを含めます:

overwrites
fancybox pack
general scripts

その関数を一般的なスクリプトに入れると完全に機能しますが、上書き js (あるべき場所) に入れると機能しません (コンソールエラーはなく、何も起こりません)。インクルードの位置を交換しようとしましたが、うまくいきません。

これが、上書き.jsに常に含まれていたため、最初から機能させることができなかった理由です。

4

1 に答える 1

1

あなたができることは、ページがfancyboxで開かれているかどうかを検証し、適切なfancyboxメソッドを実行することです。それ以外の場合は、通常のjavascriptメソッドを使用してください(つまりwindow.close())

そうは言っても、開いたページ内で(window.open()またはファンシーボックスを介して)、次のようにページを閉じる機能がある場合があります

function closePopup(){
 window.close();
}

のような閉じるボタン/リンクに関連付けられています

<a href="javascript:;" onclick="closePopup()" >Close Window</a>

それは確かにポップアップウィンドウを閉じますが、ファンシーボックスは閉じないので、次を追加できます:

function closePopup(){
 window.close();
 if(parent.jQuery().fancybox) {
  parent.jQuery.fancybox.close();
 }
}

これは、ポップアップウィンドウまたはファンシーボックスのいずれかで機能します。

于 2012-09-01T00:42:30.083 に答える