作成動機: iPhoneでいま見ているWebページのタイトル・URL・選択テキストをさくっとコピーしてSNSに投稿したい
このブックマークレットを使うと、選択したテキストを「」で囲み、ページタイトルとURLを一緒にクリップボードにコピーできる。
コピーが成功すると、画面右下に「Copied to clipboard」または「Exec command copy」と表示する。
以下はクリップボードにコピーされるフォーマット。
「{選択テキスト}」
{空行}
{タイトル} {URL}
以下がブックマークレット本体。ブックマークを作って、この内容をURLとして設定する。
ちなみに、このコードは ChatGPT にほとんどの部分を作ってもらった。
javascript:(function(){
function getSel(){
var s="";
try{s=window.getSelection().toString();}catch(e){}
if(!s){
var a=document.activeElement;
if(a && ((a.tagName==="TEXTAREA")||(a.tagName==="INPUT"&&/text|search|url|tel|password/i.test(a.type)))){
s=a.value.substring(a.selectionStart||0,a.selectionEnd||0);
}
}
return s||"";
}
var sel=getSel(), t=document.title||"", u=location.href;
var txt = (sel ? "「" + sel + "」\n\n" : "") + t + " " + u;
function show(msg){
var d=document.createElement('div');
d.textContent=msg;
Object.assign(d.style,{
position:'fixed',right:'10px',bottom:'10px',
background:'#000',color:'#fff',padding:'8px 12px',
borderRadius:'6px',zIndex:2147483647,opacity:0,
transition:'opacity .2s'
});
document.body.appendChild(d);
requestAnimationFrame(()=>d.style.opacity=1);
setTimeout(()=>{d.style.opacity=0;setTimeout(()=>d.remove(),300)},1500);
}
if(navigator.clipboard && navigator.clipboard.writeText){
navigator.clipboard.writeText(txt).then(()=>show('Copied to clipboard')).catch(fallback);
}else fallback();
function fallback(){
var ta=document.createElement('textarea');
ta.value=txt;
ta.style.position='fixed';
ta.style.left='-9999px';
document.body.appendChild(ta);
ta.select();
try{
document.execCommand('copy');
show('Exec command copy');
}catch(e){
alert(txt);
}
ta.remove();
}
})();
iPhone Safari はブックマークまでたどり着くのにまあまあ近いので使いやすいけど、iPhone Chrome はブックマークまでが遠くて使いづらい。
ブックマークレットではなくて iPhone のシェア機能でうまく他のアプリにタイトルとURLを送ってくれればいいんだけどね・・・
Posted by NI-Lab. (@nilab)