サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

SharePoint の長すぎる URL を少し軽減するブックマークレット【Edge/SharePoint/Bookmarklet】

はじめに

 SharePoint のパスに日本語が含まれている場合に、Edge や Chrome のアドレスバーから URL をコピーすると、全部 URL エンコードするため非常に長くなります。

 すると Excel の HYPERLINK 関数で使えないことが多い。

 困っている人は多いようで、以下のようなサイトが引っかかります。

SharePoint のアイテムのURLが長すぎる!なんとかしたい! – Art-Break : Taichi Nakamura

 いまどきのブラウザなら URL に漢字が入っていようが、なんとかしてくれるので、漢字部分は漢字に戻した URL をコピーしてくれれば良い。ブックマークレットにできそうです。

 上記サイトを見ると、クエリ文字列の中の「id」さえあれば良いようです。「id」を漢字に戻して、空白とスラッシュだけ個別に URL エンコードしてみます。

 ※ フォルダは「id」さえあれば良いようですが、ドキュメントの場合は「parent」も必要でした。下記のブックマークレットは、その二つの値をデコードするものです。

HYPERLINK 式を作るブックマークレット

javascript:(function(){const P=String.fromCharCode(0x25);const S=String.fromCharCode(0x20);const h=decodeURI(location.href).split('?');const u=h[0];const qs=h[1];const q=[...new URLSearchParams(qs).entries()].reduce((obj,e)=>({...obj,[e[0]]:e[1]}),{});var o={};if(q.id){o.id=q.id.replaceAll(S,P+'20').replaceAll('/',P+'2F');}if(q.parent){o.parent=q.parent.replaceAll(S,P+'20').replaceAll('/',P+'2F');}var r=Object.entries(o).map((e)=>`${e[0]}=${e[1]}`).join('&');var url=u.replaceAll(S,P+'20')+(r!='' ? '?'+r:'');const e=document.createElement('input');e.value=`=HYPERLINK("${url}","${document.title}")`;document.querySelector('body').append(e);e.select();document.execCommand('copy');e.remove();})();

改造したい場合

 Markdown リンクにしたかったり、そもそも URL だけで良いよという場合は、上記のコードの e.value=`...`; の中身を編集してください。

おわりに

 前回のブックマークレットは、そのままこちらに置き換えていただいて大丈夫だと思いますが、ちょっと動作確認中です。

 Safari はそもそもアドレスに含まれる漢字はそのままにしてくれるので、あまり関係ありません。

参考資料