誰が誰だかわかりやすくするために。
Google Apps Script(GAS)でGET/POSTし登録したかったが、CORSエラーに阻まれた。
Access to fetch at 'https://script.google.com/macros/s/AKfycbwsoKbgKwuMUCsLXeVGifX2j5bDHyld3R7vfa78Qx3hTEhPtqq43ZgEdbg3UDUvRD4g8A/exec' from origin 'https://ytyaru.github.io' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
このエラーをみて、fetch
するときmode
をno-cors
にしてみた。するとHTTPステータスが0
になって返ってきた。JSONも空っぽ。こんなステータス見たことない。stackoverflowによるとネットワークエラーということらしい。よくわからんが、失敗することはわかった。
GASでGETするURLをブラウザのURLに入力すれば、ちゃんとJSONが返ってくる。ローカルの端末でも成功する。
なのにそれをこのページでfetch
メソッドを使い実行するとCORSエラーになる。
CORSエラーはセキュリティだと思われる。よく知らないが、たぶんGoogleサーバが、ここGitHubサーバからのリクエストを弾いているのだろう。私にはどうしようもないと思う。
エラーログにあったAccess-Control-Allow-Originは、サーバ側の設定のはずで、私が編集することはできない。
まさかGASのようにAPIを作れるサービスは、すべてCORSエラーになるのか? それではまるで使い物にならないと思うのだが……。ローカルでAPIを実行しろということなのか? そんなバカな。では、自分でサーバを立てろと? でもこれはGASを提供しているGoogleサーバの問題ではないのか? サーバ側の知識がゼロなのでまったくわからん。
なぜか登録ボタンイベントが発火せず、マストドンやミスキーボタンのイベントが発火している。意味不明。要素のidやListenerのイベント名は問題ないはずなのに。
openなshadowDOMであるCustomElementがなにか悪さをしているのだろうか? どう対処すればいいか見当もつかない。
よくみたらマストドンやミスキーボタンのイベントたち、そこらへんを適当にクリックしても発火してた。お前らは一体なんなんだ? 私は一体いつからまともに動いていると錯覚していた?
少なくとも以下のうちいずれかひとつの条件を満たせば、投げモナボタンを表示する。
「mpurseのアドレスらしき文字列」とは最初にみつけた34字以上の連続した英数字である。(正規表現「/[a-zA-Z0-9]{34,}/g」)