search/pageというページについて
このリンクをクリックすれば開けるようにしたMijikko.icon search/pageを開くという名前のリンクやページを作ってしまうと開けなくなるかも
特徴
正攻法では開けない
UserScriptを使っても開けない?Mijikko.icon
開けなくなった場合、削除や編集はUserScriptから行う必要がある
削除した後StreamからRestoreするのも何故かうまくいかない このページの下の方に挿入されてしまう
どうすれば消せるんだこれ
takker.icon
code:delete.js
import { deletePage } from "/api/code/takker/scrapbox-headless-script/mod.js";
await deletePage("villagepump", "search/page");
新しい方Mijikko.icon
code:delete2.js
await deletePage("villagepump", "search/page");
あとUserScriptなくても新規ページ作成でsearch/pageからのマージでいけると思うyuki_minoh.icon むりだった。w
せっかくなのでかっこいいサムネをつけておいたtakker.icon
https://gyazo.com/8e0a12f22f8fd744dc974a080652cd9a
なにぃッ、、、yuki_minoh.icon
ってなった
これ、スラッシュはurlではエスケープされているから問題なく開けると思っていた ページURL: https://scrapbox.io/villagepump/search%2Fpage
逆に検索URLが%2Fでも機能するのか
これらのURLでも検索可能
これだとだめ
%2Fをスラッシュに変換しているのはブラウザではなくScrapbox側ってことかblu3mo.icon
すごwyuki_minoh.icon
どうやって作ったのか気になる
新規ページのタイトルを普通にsearch/pageにすれば作れますblu3mo.icon
まじかよwyuki_minoh.icon
へーって感じ
開けたblu3mo.icon*3
へーyuki_minoh.icon
再現に失敗しているんだが
search/pageしか作っていないプロジェクト1件とどちらも作っていないプロジェクト2件の両方で試したyuki_minoh.icon
コードを読んでいても起こりそうにない不思議な挙動なのでサーバー側でやってんのかなと思って再現しようとしたらだめだった
(追記)あれ、出来なくなった...w
起きた事
1. 元々は、
不思議な挙動ではある
2. しかし、一度タイトルsearchのページを作成すると、
挙動が変化した
というかこれが当たり前の挙動ではある
3. その後、タイトルsearchのページを削除しても、
とても不思議blu3mo.icon*2
これは複数プロジェクトで再現できたblu3mo.icon
つまり、「一度も作られた事がないページ」と「一度作られてから削除されたページ」で挙動に違いがあるという事
これならあり得るtakker.icon
1. blu3mo.iconさんがsearch/pageを作ろうとして、新規ページをひらきsearchまでタイトル欄に書き込む 2. この状態で誰かがsearchにアクセスする
3. blu3mo.iconさんがsearch/pageまで入力し終える
↑これでは?Mijikko.icon
yuki_minoh.iconの解釈
どうしても再現できないので不思議に思い、深掘りしてしらべたので報告しておく
まず、ブラウザ系統の通常のアクセスならJavaScriptによるホーム画面へのルーティングを突破できない これを突破できるのはおそさくサーバー側での302リダイレクトのみ
また、JavaScriptには、/:projectName/searchを/:projectName/search/pageにルーティングするような設定は見当たらない ただし、本当はどのような編集が行われていたのかはわからない
yuki_minoh.iconの調査によると、改名前の記事名に対して「作成後、かつ改名前」にアクセスされなければリダイレクトが設定されない
そのうえ、改名される前で、しかも記事が作成されたあとに、ブラウザリロードなど何かしらのアクセスがあった
こう考えればつじつまがあうと考えている
で、今実際にやってみて、やっと再現できた
というわけでいい推理だったのではと考えている
それでもって、アクセスできなくてもAPIは叩けるわけなんで、編集履歴を追ってみたよ
https://gyazo.com/9804807203b16d1fc9cd3dae5a503937/raw#.png
初期はsearchだったことがこれではっきりしたね
なるほどblu3mo.icon*2
code:js
(async () => {
const id = (await (await fetch("/api/pages/villagepump/search%2Fpage")).json()).id;
console.log(id);
const data = (await (await fetch("/api/commits/villagepump/"+id)).json()).commits.flatMap(({changes}) => changes);
console.table(data);
})();
他にもありそうblu3mo.icon