よくあるポップアップ
onclick イベントにて window.open 関数でポップアップを表示するよくある方法。
<a href='#' onclick="window.open('hoge.html', 'target', 'width=300, height=200');"> ポップアップ</a>
この方法の問題点は、href にリンク先が設定されていないため、JavaScript を有効にしていない場合にリンク先のページを見るすべがないことです。
これを解決するには、以下のように href の指定先を JavaScript で読むことで解決します。
<a href='hoge.html' onclick="window.open(this.href,'target','width=300,height=200');"> ポップアップ</a>
でもこれだと、HTML 中に JavaScript が埋め込まれていてイマイチです。
onclick を使わない
一般的にページコンテンツの中に、振る舞いを扱う JavaScript を含めるのは望ましくありません。
ページアンカーに class 属性を割り当てて、
<a href='hoge.html' class="popupwindow">ポップアップ</a>
JavaScript (以下の例ではjQuery)により外部からイベントをバインドすることで改善できます。
$(function() { $("a.popupwindow").click(function(event){ event.preventDefault(); window.open($(this).attr('href'), "target", "width=300,height=200,resizable=yes,scrollbars=yes"); }); });
でもこれ、サイズなどの見た目に関する定義が JavaScript 側に移ってきていてイマイチです。
jQueryプラグインでも改善できますが
jquery.popupwindow.js を使うと、
<a href="hoge.html" class="popupwindow" rel="height:400,width:400"> ポップアップ1</a> <a href="hoge.html" class="popupwindow" rel="windowCenter"> ポップアップ2</a>
HTML 側では見た目に関する定義を行い、
var profiles = { window800: { height:800, width:800, status:1}, window200: { height:200, width:200, status:1, resizable:0 }, windowCenter: { height:300, width:400, center:1 } }; $(function() { $(".popupwindow").popupwindow(profiles); });
のように JavaScript 側で動作を定義できます。
profiles として共通的に定義したサイズを使うこともできますし、それぞれにポップアップのサイズなどを定義することもできます。
HTML5 のカスタムデータ属性を使う
HTML5 では、構造内に独自に定義できるカスタムデータ属性が使えます。
定義はこちら
data- に続く属性を自由に作成でき、拡張値を埋め込むことができます。
<a href="hoge.html" class="popupwindow" data-width="300" data-height="200" title="popup"> ポップアップ</a>
として、
jQuery側で以下のように書くことができます。
$(function() { $("a.popupwindow").click(function(event){ event.preventDefault(); var href = $(this).attr("href"), width = $(this).data("width"), height = $(this).data("height"); window.open(href, "targetName", "width=" + width + ",height=" + height + ""); }); });
jQueryでは data() メソッドで読取が楽チンです。
古いjQueryでは .data() メソッドが使えないので、$(this).attr("data-width"); のようにする必要があります。