note から WordPress に出戻りました!😭

Google Chrome + ShortcutKey2URL で URL コピー出来なかった話

だるかぶ

サンダルでスーパーカブ乗りの『だるかぶ』です!
ご訪問ありがとうございます。ゆっくりしていってね。(本ページは広告を含みます。)

以前は Google Chrome で「Keyconfig」という拡張機能を便利に使ってたんだけど、いつのまにか開発停止になっているみたい。

ということで、Keyconfig の代わりになる拡張機能を物色中です。

#️⃣ やりたいこと

キー入力で下のようなコードを呼び出し、パラメーターを除去した URL をクリップボードにコピーしたい。

javascript:(function(){
    var clp = location.href;
    var clipboardText = clp.substring(0, clp.indexOf("\?"));
    navigator.clipboard.writeText(clipboardText);
})();

#️⃣ ShortcutKey2URL が良さそう

ShortcutKey2URL は、Keyconfig のように、キーとなる文字を順番に入力して、実行する操作を絞り込んで実行します。
設定のインポートとエクスポートが出来るのもナイス。

とても良さそうな拡張機能だったんですが、私の環境ではうまく動作しませんでした。

#️⃣ そもそも JavaScript が動かない

まず、動作確認で ShortcutKey2URL に下記のようなアラートを表示する簡単な JavaScript を書いてみたけど動かない。

alert('test');

アンチウイルスソフトをオフにして試してみたりして、3日ぐらい悶々と悩んだけど、下記の設定変更で正常にアラートが出るようになった。

  1. Google Chrome 画面右上の点々をクリック。

  2. 「拡張機能」→「拡張機能の管理」をクリック。

  3. 「ShortcutKey2URL」の詳細をクリック。

  4. 「ユーザースクリプトを許可する」をオンにする。

#️⃣ クリップボードにコピーできない

ShortcutKey2URL に、表示しているサイトの URL をクリップボードにコピーする JavaScript を書いてみたけど動かない。

Gemini に書いてもらったコード

javascript:(async function(){
  // ページ本体にフォーカスを強制的に戻す
  window.focus(); 
  
  const url = location.href;
  const urlObject = new URL(url);
  const cleanUrl = urlObject.origin + urlObject.pathname;

  // 1. わずかな遅延を設ける(セキュリティチェックを通過させるための試み)
  await new Promise(resolve => setTimeout(resolve, 50)); 

  // 2. クリップボードAPIを非同期で呼び出す
  navigator.clipboard.writeText(cleanUrl)
    .then(() => {
      console.log(`URLのコピー: 成功. コピーされたURL: ${cleanUrl}`);
    })
    .catch(err => {
      console.error('クリップボードへのコピーに失敗しました:', err);
      alert('コピーに失敗しました。アクティブなタブで、ページのどこかをクリックした後にお試しください。');
    });
})();

ブックマークレット形式(一行に整形)

javascript:(async function(){window.focus();const url=location.href;const urlObject=new URL(url);const cleanUrl=urlObject.origin+urlObject.pathname;await new Promise(resolve=>setTimeout(resolve,50));navigator.clipboard.writeText(cleanUrl).then(()=>{console.log(`URLのコピー: 成功. コピーされたURL: ${cleanUrl}`);}).catch(err=>{console.error('クリップボードへのコピーに失敗しました:',err);alert('コピーに失敗しました。アクティブなタブで、ページのどこかをクリックした後にお試しください。');});})();

クリップボードの設定を変更してみた

  1. Google Chrome 画面右上の点々をクリック。

  2. 「設定」をクリック。

  3. 「プライバシーとセキュリティ」をクリック。

  4. 「サイトの設定」をクリック。

  5. 「その他の設定」をクリック。

  6. 「クリップボード」をクリック

  7. 「デフォルトの動作」で「サイトがクリップボード内のテキストや画像へのアクセスを要求できるようにする」を選択。

上記の設定後も動かない。

実行前にページにフォーカスさせると動く

色々と試してみると、表示しているサイトのどこかをクリックして、ShortcutKey2URL で実行するとうまく URL がコピーされる。

上記のコードをブックマークにして実行すると正常に動作するので、Gemini に聞いてみると下記のような回答が返ってきた。

拡張機能の領域でブックマークレットを実行するのはセキュリティ的に無理なんじゃない?(意訳)

ということで、Chrome + ShortcutKey2URL でブックマークレットを起動させるのは諦めました。Firefox だと何の問題もなく正常に動くんですけどね~。

#️⃣ ちなみに「Shortkeys」も入れてみた

ちなみに、別の拡張機能「Shortkeys」も入れてみたけど1文字のショートカットしか登録できないので使用しないことにした。
※ショートカットが覚えられない…。

さらに「Shortkeys」のオプション画面で JavaScript のコードを書くんじゃなくて、作成したブックマークレットのブックマークを呼び出す感じ。

でも「Shortkeys」だと URL がコピーできる。う~ん。

現場からは以上です。それでは、またッ!!!