【完了】アドレスバーがURLをデコードするのを防ぎたい
前提
シンプルなのでソースコード覗いてみてね
やりたいこと
アドレスバーにhttps://scrapbox.io/YeJiEun/https://scrapbox.io/YeJiEun/%E3%82%84%E3%82%8A%E3%81%9F%E3%81%84%E3%81%93%E3%81%A8%E3%83%AA%E3%82%B9%E3%83%88を渡したときに%E3%82%84%E3%82%8A%E3%81%9F%E3%81%84%E3%81%93%E3%81%A8%E3%83%AA%E3%82%B9%E3%83%88の部分をやりたいことリストという日本語にデコードされないようにしたい
どういうことかというと、、、
https://scrapbox.io/files/63e4d51bb6629d001bd4751e.png
↑ここからTwitterにシェアをタップすると、
https://scrapbox.io/files/63e4d54eed4891001b76a320.png
↑https://scrapbox.io/YeJiEun/やりたいことリストと表示されるところを
https://scrapbox.io/files/63e4d57bdd9688001c2a48f8.png
↑https://scrapbox.io/YeJiEun/%E3%82%84%E3%82%8A%E3%81%9F%E3%81%84%E3%81%93%E3%81%A8%E3%83%AA%E3%82%B9%E3%83%88とデコードされた文字のまま表示したい
詰まってるところ
アドレスバーにURLを渡すとエンコードされた文字列は勝手にデコードされてしまうっぽい
どうすればデコードされたままの文字列を保てるか
解決した方法
ロジック
アドレスバーでは必ずdecodeされるプロセスがあるっぽい
だから2回encodeすることでアドレスバーに一回decodeされるとちょうどいい状態にする
わかりづらいと思うので例↓↓↓
原型 やりたいことリスト
encode一回目 %E3%82%84%E3%82%8A%E3%81%9F%E3%81%84%E3%81%93%E3%81%A8%E3%83%AA%E3%82%B9%E3%83%88
encode2回目 %25E3%2582%2584%25E3%2582%258A%25E3%2581%259F%25E3%2581%2584%25E3%2581%2593%25E3%2581%25A8%25E3%2583%25AA%25E3%2582%25B9%25E3%2583%2588
これでencode2回目をアドレスバーにdecodeされるとちょうどencode一回目の理想の状態になる
ソースコード
code:script.js
scrapbox.PopupMenu.addButton({
title: 'Twitterにシェア',
onClick: text => {
const encodeText = encodeURIComponent(text);
const projectName = scrapbox.Project.name;
const pageTitle = scrapbox.Page.title;
//encodeURIComponentで一回目のencode
const encodePageTitle = encodeURIComponent(pageTitle);
const pageUrl = https://scrapbox.io/${projectName}/${encodePageTitle};
const url = https://twitter.com/intent/tweet?text=${projectName}が「${pageTitle}」に「${text}」を追加したよ❗️${pageUrl};
//encodeURIで二回目のencode
//そしてwindow.open時にdecodeされる
window.open(encodeURI(url), "_blank", "width=600,height=300");
}
})