1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

URLとタイトルをコピーするブックマークレット(IE非対応、HTML形式対応)

Posted at

現在のページのURLとタイトル、選択範囲テキストをコピーするブックマークレット(IE非対応)を作成。HTML形式版は以下のような形式でコピーされ、そのままリンクとして貼り付けられる。

<a href="URL">タイトル</a> - 選択範囲テキスト

テキスト形式版は以下のような形式でコピーされる。

タイトル
URL
選択範囲テキスト

Markdown形式版は以下のような形式でコピーされる。

[タイトル](URL)
選択範囲テキスト

2021年の「URLとタイトルをコピーするブックマークレット(IE非対応)」に、HTML形式版を追加したものです。

現在のページをコピー(HTML形式)

javascript:(function(){var d=document,getSelectionText=function(){var e=window.getSelection,k=d.getSelection,x=d.selection;return e?e().toString():(k?k():(x?x.createRange().text:''))},s=getSelectionText(),a='<a href="'+d.URL+'">'+d.title+'</a>',result=a+(s.length?' - '+s:'');navigator.clipboard.write([new ClipboardItem({"text/html":new Blob([result],{type:"text/html"})})]).then(function(){alert('リンクをHTML形式でコピーしました')}).catch(function(error){alert('コピーに失敗しました: '+((error&&error.message)||'不明なエラー'))})})();

以下のような形式でコピーされる。

<a href="URL">タイトル</a> - 選択範囲テキスト

改行削除前のコードは以下。

javascript:(function() {
    var d = document;
    var getSelectionText = function() {
        var e = window.getSelection;
        var k = d.getSelection;
        var x = d.selection;
        return e ? e().toString() : (k ? k() : (x ? x.createRange().text : ''));
    };
    var s = getSelectionText();
    var a = '<a href="' + d.URL + '">' + d.title + '</a>';
    var result = a + (s.length ? ' - ' + s : '');
    
    navigator.clipboard.write([
        new ClipboardItem({
            "text/html": new Blob([result], { type: "text/html" })
        })
    ]).then(function() {
        alert('リンクをHTML形式でコピーしました');
    }).catch(function(error) {
        alert('コピーに失敗しました: ' + ((error && error.message) || '不明なエラー'));
    });
})();

現在のページをコピー(テキスト形式)

javascript:(function copyToClipboard(text) {var d=document,k=d.getSelection,x=d.selection,e=window.getSelection,s=new String(e?e():(k)?k():(x?x.createRange().text:0)),a=d.title+"\n"+d.URL+(s.length?"\n"+s:"");return navigator.clipboard.writeText(a).then(function() {alert('コピーしました')}).catch(function(error) {alert((error && error.message) || 'コピーに失敗しました')})})();

以下のような形式でコピーされる。

タイトル
URL
選択範囲テキスト

改行削除前のコードは以下。

javascript:(
function copyToClipboard(text) {
  var d=document,k=d.getSelection,x=d.selection,e=window.getSelection,s=new String(e?e():(k)?k():(x?x.createRange().text:0));
  var t=d.title+"\n"+d.URL+(s.length?"\n"+s:"");
  return navigator.clipboard.writeText(t).then(function() {
    alert('コピーしました')
  }).catch(function(error) {
    alert((error && error.message) || 'コピーに失敗しました')
  })
}
)();

現在のページをコピー(Markdown形式)

javascript:(function copyToClipboard(text) {var d=document,k=d.getSelection,x=d.selection,e=window.getSelection,s=new String(e?e():(k)?k():(x?x.createRange().text:0));var t="["+d.title+"]("+d.URL+")"+(s.length?"\n"+s:"");return navigator.clipboard.writeText(t).then(function() {alert('コピーしました')}).catch(function(error) {alert((error && error.message) || 'コピーに失敗しました')})})();

以下のような形式でコピーされる。

[タイトル](URL)
選択範囲テキスト

改行削除前のコードは以下。

javascript:(
function copyToClipboard(text) {
  var d=document,k=d.getSelection,x=d.selection,e=window.getSelection,s=new String(e?e():(k)?k():(x?x.createRange().text:0));
  var t="["+d.title+"]("+d.URL+")"+(s.length?"\n"+s:"");
  return navigator.clipboard.writeText(t).then(function() {
    alert('コピーしました')
  }).catch(function(error) {
    alert((error && error.message) || 'コピーに失敗しました')
  })
}
)();

おわりに

作成経緯については2021年版の「URLとタイトルをコピーするブックマークレット(IE非対応)」の通りで、これにHTML形式版を追加したものです。IE非対応、あとHTTPSではない(HTTPの)ページでも動かない気がしますが、その辺は割切りました。諸々各所からお借りしたコードと生成AIに作成したコードをアレンジしたもので、先人には多々感謝。

参照

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?