colorboxを閉じた時に親ウィンドウをリロードする(reload on closed)

colorboxでモーダルウィンドウを閉じた時に親ウィンドウをリロードさせたかったので共通して使うためのコードを書きました。

基本的な考え方としては、リロードさせるかどうかのフラグとリロードさせる関数を持っておいて閉じるイベントが発生した際に2つの値を見てリロード処理を行います。
このフラグと関数はどこからでも設定できます。デフォルトではフラグはfalse、リロード関数はlocation.reload()です。

jsファイル

下記のjavascriptファイルを作成しjquery.colorbox.js(もしくはjquery.colorbox-min.js)の直後に読み込みます。

jquery.colorbox.reloadOnClosed.js

if (jQuery && jQuery.colorbox) {
  jQuery.colorbox.reloadOnClosedSettings = {
		reloadFunc: function() {location.reload(true);},
		needReloadParent: false
	};
	jQuery.colorbox.reloadOnClosed = function(options) {
		var reloadOnClosedSettings = jQuery.colorbox.reloadOnClosedSettings;
		if (options === undefined) {
			reloadOnClosedSettings.needReloadParent = true;
			return;
		};
		if (options.needReloadParent === true || options.needReloadParent === false) {
			reloadOnClosedSettings.needReloadParent = options.needReloadParent;
		}
		if (options.reloadFunc && (typeof options.reloadFunc === "function")) {
			reloadOnClosedSettings.reloadFunc = options.reloadFunc;
		} else if (options.reloadFunc === null) {
			reloadOnClosedSettings.reloadFunc = null;
		}
	};
	jQuery(document).on('cbox_open', function(){
		jQuery.colorbox.reloadOnClosedSettings.needReloadParent = false;
	});
	jQuery(document).on('cbox_closed', function(){
		var reloadOnClosedSettings = jQuery.colorbox.reloadOnClosedSettings;
		if (reloadOnClosedSettings.needReloadParent === true && reloadOnClosedSettings.reloadFunc && (typeof reloadOnClosedSettings.reloadFunc === "function")) {
			reloadOnClosedSettings.reloadFunc();
		}
	});
}

github上にも上げました。
http://github.com/kamegu/jquery.colorbox.reloadOnClosed

使い方

colorbox()を呼ぶところは何も変える必要がありません。
モーダルウィンドウが開いた後に、下記のメソッドを呼ぶことによってモーダルを閉じると同時にリロードできます。このメソッドはリロードフラグをオンにするメソッドです。

jQuery.colorbox.reloadOnClosed();

通常は、jQuery.closebox.close()の直前に呼ぶことが多いと思いますが、必ずしもセットで呼ぶ必要はないです。
たとえば、iframeで登録後引き続きモーダル上で処理を行いたい場合に、登録した時点でフラグをオンにしておけば、モーダルのクローズボタンやOverlayをクリックして閉じる場合にもリロード処理は実行されます。

また、デフォルトではリロード処理はlocation.reload(true)ですが、これも変えることが出来ます。Ajaxで一部のみ更新するといった処理も可能です。

jQuery.colorbox.reloadOnClosed({
  reloadOnClosed: function(){
    // ここにリロード処理を書く
  };
});

デモ画面です。
http://kamegu.github.io/demo/colorbox/reload-on-close.html