以前、jQueryのプラグイン"clipboard.js"を実行してURLとタイトルをクリップボードにコピーする機能を記事ページに追加実装しました。
その他、ボタンのスタイル等はcssでお好みで仕上げてください。
実際の稼働確認は以下のデモページを用意しているので確認ください。
デモページ
簡単便利な機能なのですが、BloggerでjQueryを使用するにはプラグインも含めCDNへのアクセスが必須。
しかし、余計なアクセスを出来る限り廃止したいと思い、今回はjQueryとプラグインを使わずJavaScriptのみでクリップボードへコピーする仕様のボタンを作成してみました。
jQueryを使わず"URLをコピーするボタン"を作る
改めて考えてみるとJavaScriptのみで記述しても難しい事は無い。…と言うのもJavaScript APIにシステム(os)に読み書きできるclipboard APIを使います。IEを除く殆どのブラウザの最新Verで実行可能です。基本型は以下の通り。
htmlに<input>タグでボタンを作ります。
<input id='urlcopyBtn' onclick='urlCopy()' type='button'
value='xxxxx'/>
ボタンをクリックすると、onclick属性に指定した関数を実行します。関数'urlCopy()'は、後述する<script>で囲んだ関数になります。名前は別に何でもいいけど必ず同じ名前にする。
value='xxxxx' はボタンに表示されるテキストです。'xxxxx'は適当な文言に差し替えます。
以下がJavaScriptの記述。上記<input>タグがクリックされると実行されます。
1.URLをクリップボードにコピーするJavaScript
<!-- URL copy button script -->
<script> // <![CDATA[
function urlCopy() {
var url = location.href; navigator.clipboard.writeText(url);
document.getElementById("urlcopyBtn").value="yyyyy";
}
// ]]>
</script>
<script> // <![CDATA[
function urlCopy() {
var url = location.href; navigator.clipboard.writeText(url);
document.getElementById("urlcopyBtn").value="yyyyy";
}
// ]]>
</script>
システム(os)のクリップボードにテキストを書き出す動作と、コピーボタンに表示されるテキストを変更を実行しています。
変数urlにlocation.href(現在のページのurl)を代入して、navigator.clipboard.writeText(url)でクリップボードにコピーします。
document.getElementById("urlcopyBtn").value="yyyyy";}は、ボタンに表示されている元のテキスト'xxxxx'をクリック後に"yyyyy"変えます。
urlcopyBtnは<input>タグのidです。
2.タイトルとURLをクリップボードにコピーするJavaScript
<!-- URL copy button script -->
<script> // <![CDATA[
function urlCopy() {
var url = location.href;
var title = document.title;
navigator.clipboard.writeText("【"+title +"】"+" " + url);
document.getElementById("urlcopyBtn").value="yyyyy";
}
// ]]>
</script>
<script> // <![CDATA[
function urlCopy() {
var url = location.href;
var title = document.title;
navigator.clipboard.writeText("【"+title +"】"+" " + url);
document.getElementById("urlcopyBtn").value="yyyyy";
}
// ]]>
</script>
変数title に document.title(現ページのタイトル)を代入。
navigator.clipboard.writeText(title + " " + url);でクリップボードにURLとタイトルをコピーします。
基本は以上です。
コピーボタンの追加(QooQの場合)
QooQに実装してみます。HTMLにコピーボタン用の<b:include>,<b:includable>タグを追加します。
これらはBlogger特有の要素で、<b:include>で要素を配置して関数の<b:includableを呼び出す感じ。
HTMLの変更はBloggerの管理画面より テーマ>>HTMLの編集と進みテンプレートのHTMLを変更します。尚、変更については自己責任でお願いします。
デモサイトのQooQに実装してみました。
<b:includable id='main' var='top'>以下に記述されている複数の<b:includable id=''>〜</b:includable>の最後に追加すれば良いと思います。保存すると勝手にidのアルファベット順に並べ替えられます。
これらはBlogger特有の要素で、<b:include>で要素を配置して関数の<b:includableを呼び出す感じ。
HTMLを変更します
テーマ(テンプレート)のバックアップを取ってから変更しましょう。HTMLの変更はBloggerの管理画面より テーマ>>HTMLの編集と進みテンプレートのHTMLを変更します。尚、変更については自己責任でお願いします。
デモサイトのQooQに実装してみました。
<b:include>の追加
今回はシェアボタンの上部に設置したいので、<b:include cond='data:post.sharePostUrl' data='post' name='shareButtons'/>の直上に以下青字を追加。
<b:include name='copy-url'/>
<b:include cond='data:post.sharePostUrl' data='post' name='shareButtons'/>
<b:include cond='data:post.sharePostUrl' data='post' name='shareButtons'/>
<b:includable>の追加
次に<b:include>で呼び出される関数、<b:includable>を記述します。<b:includable id='main' var='top'>以下に記述されている複数の<b:includable id=''>〜</b:includable>の最後に追加すれば良いと思います。保存すると勝手にidのアルファベット順に並べ替えられます。
<b:includable id='copy-url' var='post'>
<!--URL copy button-->
<div class='copy-url'>
<input id='urlcopyBtn' onclick='urlCopy()' type='button' value='URLをコピーします。'/>
</div>
</b:includable>
<!--URL copy button-->
<div class='copy-url'>
<input id='urlcopyBtn' onclick='urlCopy()' type='button' value='URLをコピーします。'/>
</div>
</b:includable>
JavaScriptの追加
</body>の直前に以下を追加します。タイトルとURLのコピーする仕様です。
<!-- URL copy button script -->
<script>
// <![CDATA[
function urlCopy() {
var url = location.href;
var title = document.title;
navigator.clipboard.writeText("【"+title +"】"+" " + url);
document.getElementById("urlcopyBtn").value="クリップボードにコピーしました。";
}
// ]]>
</script>
<script>
// <![CDATA[
function urlCopy() {
var url = location.href;
var title = document.title;
navigator.clipboard.writeText("【"+title +"】"+" " + url);
document.getElementById("urlcopyBtn").value="クリップボードにコピーしました。";
}
// ]]>
</script>
その他、ボタンのスタイル等はcssでお好みで仕上げてください。
実際の稼働確認は以下のデモページを用意しているので確認ください。
デモページ
同様機能をjQueryで実行するよりは速度等で有利になるはずです。
QooQデフォルトでは関係ありませんが、Vaster2等テーマによってはjQueryで様々な関数を実行しているテーマもあります。
これらも脱jQueryが可能であれば、多少ページ速度も上がると思います。
以上
コメント