BootstrapのModalで別ページを表示する

BootstrapのModalを使って、lightboxみたいに別ページを表示出来たら便利かなと思い、作ってみました。
# 環境
jQuery 3.3.1
Bootstrap 4.1.3

# Javascript
```javascript:js\plugin.js
;(function($) {
	"use strict";
	$.fn.modals = function(option) {
		var o = $.extend({
			target: "#modal",
			width: 500,
			height: 500
		}, option);
		return this.each(function() {
			if ($(this).get(0) && !$(o.target).get(0)) {
				$("body").append("<div id='modal' class='modal fade' tabindex='-1' role='dialog' aria-labelledby='modal' aria-hidden='true'><div class='modal-dialog modal-dialog-centered' role='document'><div class='modal-content'/></div></div>");
				$("body").append("<button type='button' id='modal-close' class='modal-close' data-dismiss='modal'/>");
			}
			$(document).on("click", "[data-dismiss=modal]", function(event) {
				if (!$(o.target).get(0)) {
					$("#modal-close", window.parent.document).trigger("click");
				} else {
					$(o.target).modal("hide");
				}
			});
			$(document).on("click", "[data-toggle=modal]", function(event) {
				// eventじゃなくthisで取得できる
				// var a = $(event.target).attr("href");
				var a = $(this).attr("href");
				if (typeof a !== "undefined" && a !== false) {
					var b = $(o.target).find(".modal-content");
					b.empty();
					b.append("<iframe src='"+a+"' class='modal-frame' width='"+o.width+"' height='"+o.height+"'></iframe>");
					$(o.target).modal();
				}
			});
		});
	}
})(jQuery);
```

# HTML
### 親ページ
```html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="/path/to/css/bootstrap.min.css?v=4.1.3"/>
</head>
<body>
<p>
	<a href="表示したいページのURL" data-toggle="modal">Show</a>
</p>
<script type="text/javascript" src="/path/to/js/jquery.min.js?v=3.3.1"></script>
<script type="text/javascript" src="/path/to/js/bootstrap.min.js?v=4.1.3"></script>
<script type="text/javascript" src="/path/to/js/bootstrap.bundle.min.js?v=4.1.3"></script>
<script type="text/javascript" src="/path/to/js/plugin.js"></script>
<script type="text/javascript">/*<![CDATA[*/
$(function(){
	$("[data-toggle=modal]").modals();
});
/*]]>*/</script>
</body>
</html>
```

### Modalの中に表示するページ
```html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="/path/to/css/bootstrap.min.css?v=4.1.3"/>
</head>
<body>
<div class="modal-header">
	<h4 class="modal-title">タイトル</h4>
	<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
	<p>．．．</p>
</div>
<script type="text/javascript" src="/path/to/js/jquery.min.js?v=3.3.1"></script>
<script type="text/javascript" src="/path/to/js/bootstrap.min.js?v=4.1.3"></script>
<script type="text/javascript" src="/path/to/js/bootstrap.bundle.min.js?v=4.1.3"></script>
<script type="text/javascript" src="/path/to/js/plugin.js"></script>
</body>
</html>
```
`data-toggle=modal`を持つ要素が見つかったら、body内にModal用の要素を追加します。またイベント発火用のボタンも追加します。
iframe内の`data-dismiss=modal`が押されたら、親ページ内の`data-dismiss=modal`が発火します。
ボタンはCSSで見えないように調整します。

# 追記
`[data-toggle=modal]`のクリックイベントを取得する部分で、eventじゃなくてthisで取れることに気づいたので修正しました。

# 参考
参考にさせていただきました。ありがとうございます。
https://qiita.com/ayies128/items/5d044bc08b9308767f4c