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

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

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

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

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

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

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

2021年の「[URLとタイトルをコピーするブックマークレット（IE非対応）](https://qiita.com/tsukamoto/items/ef6ca3da87f7cc91e4de)」に、HTML形式版を追加したものです。

# 現在のページをコピー（HTML形式）

```javascript
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)||'不明なエラー'))})})();
```

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

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

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

```javascript
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
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) || 'コピーに失敗しました')})})();
```

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

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

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

```javascript
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
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) || 'コピーに失敗しました')})})();
```

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

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

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

```javascript
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非対応）](https://qiita.com/tsukamoto/items/ef6ca3da87f7cc91e4de)」の通りで、これにHTML形式版を追加したものです。IE非対応、あとHTTPSではない（HTTPの）ページでも動かない気がしますが、その辺は割切りました。諸々各所からお借りしたコードと生成AIに作成したコードをアレンジしたもので、先人には多々感謝。

# 参照

* [JavaScript でクリップボードにテキストをコピーする (2021年版) | MSeeeeN | 大阪発 IT メディア by MSEN](https://mseeeen.msen.jp/copy-text-to-clipboard-with-javascript-in-2021/)
* [Navigator.clipboard - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/Navigator/clipboard)
* [URLとタイトルをコピーするブックマークレット（IE非対応） - Qiita](https://qiita.com/tsukamoto/items/ef6ca3da87f7cc91e4de)