
サンプル・プログラムの実行例

サンプル・プログラムのダウンロード
dispClipBoardText.php | サンプル・プログラム本体 |
バージョン | 更新日 | 内容 |
---|---|---|
1.0.0 | 2025/01/18 | 初版 |
解説:サーバ・プログラム
GET渡しされた変数 text(クリップボードのテキストが入る)を画面に表示するだけのプログラムである。サーバ・プログラムは Pythonでも Javaでも何でもよい。
dispClipBoardText.php
24: // 初期化処理 ================================================================
25: define('INTERNAL_ENCODING', 'UTF-8');
26: mb_internal_encoding(INTERNAL_ENCODING);
27: mb_regex_encoding(INTERNAL_ENCODING);
28: define('REFERENCE', 'https://www.pahoo.org/e-soul/webtech/js01/js01-19-01.shtm');
29:
30: // プログラム・タイトル
31: define('TITLE', 'クリップボードにあるテキストをサーバ・プログラムに渡す');
32:
33: // 表示幅(ピクセル)
34: define('WIDTH', 600);
35:
36: /**
37: * 共通HTMLヘッダ
38: * @global string $HtmlHeader
39: */
40: $encode = INTERNAL_ENCODING;
41: $title = TITLE;
42: $width = WIDTH;
43: $HtmlHeader =<<< EOT
44: <!DOCTYPE html>
45: <html>
46: <head>
47: <meta charset="{$encode}">
48: <title>{$title}</title>
49: <meta name="author" content="studio pahoo" />
50: <meta name="copyright" content="studio pahoo" />
51: <meta name="ROBOTS" content="NOINDEX,NOFOLLOW" />
52: <meta http-equiv="pragma" content="no-cache">
53: <meta http-equiv="cache-control" content="no-cache">
54: <meta http-equiv="X-UA-Compatible" content="IE=edge">
55: <meta name="viewport" content="width={$width},user-scalable=yes">
56:
57: EOT;
58:
59: /**
60: * 共通HTMLフッタ
61: * @global string $HtmlFooter
62: */
63: $HtmlFooter =<<< EOT
64: </html>
65:
66: EOT;
67:
68: /**
69: * HTML BODYを作成する.
70: * @param string $text 表示テキスト(クリップボードの内容)
71: * @return string HTML BODY
72: */
73: function makeCommonBody($text) {
74: $refere = REFERENCE;
75: $title = TITLE;
76: $version = '<span style="font-size:small;">' . date('Y/m/d版', filemtime(__FILE__)) . '</span>';
77: $width = WIDTH;
78:
79: $body =<<< EOT
80: <body>
81: <h2>{$title} {$version}</h2>
82: <p style="width:{$width}px;">
83: クリップボードの内容:
84: <span style="color:blue;">{$text}</span>
85: </p>
86:
87: <div style="border-style:solid; border-width:1px; margin:20px 0px 0px 0px; padding:5px; width:{$width}px; font-size:small; overflow-wrap:break-word; word-break:break-all;">
88: ※参考サイト:<a href="{$refere}">{$refere}</a>
89: </div>
90: </body>
91:
92: EOT;
93: return $body;
94: }
95:
96: // メイン・プログラム =======================================================
97: // パラメータを取得する.
98: $text = '';
99: if (isset($_GET['text'])) {
100: $text = mb_convert_encoding($_GET['text'], INTERNAL_ENCODING, 'auto');
101: }
102:
103: // 表示HTMLを作成する.
104: $HtmlBody = makeCommonBody($text);
105:
106: // 画面に表示する.
107: echo $HtmlHeader;
108: echo $HtmlBody;
109: echo $HtmlFooter;
110:
111: //オブジェクトを解放する.
112: $pbs = NULL;
解説:ブックマークレット
javascript:(function(){クリップボードには、テキスト以外にも様々な形式のコンテンツを格納することができるが、このうちテキストを取り出すのが JavaScript の () メソッドである。これは Promise オブジェクトであるため、then句の中でクリップボードの内容を変数 clipboradText に格納する必要がある。
navigator.clipboard.readText()
.then(clipboradText => {
window.open("http://(phpプログラムの配置パス)/dispClipBoardText.php?text=" + encodeURIComponent(clipboradText), "_blank");
})
.catch(errmsg => {
alert("クリップボードの読み取りに失敗しました: " + errmsg);
});
})();
クリップボードから取得できなかった場合は、catch句の中でダイアログに警告を表示するようにした。
プログラム作成の背景
ここで落ち着いて考え直した――このケースでは、クライアントPCのクリップボード内容を取得するのだから、クライアント・プログラム(JavaScript)で書いてサーバ・プログラム(PHP)に渡すのが本来の流れである。そこで、クライアント・プログラムをブックマークレットとして実装することにした。
参考サイト
- JavaScriptでクリップボードを使う:ぱふぅ家のホームページ
- 6.6 クリップボード:ぱふぅ家のホームページ
- JavaScriptでクリップボードの画像取得+リサイズ:ぱふぅ家のホームページ