表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

180/210

JSONPの呪い再び(ドメインをまたいだ外部テキストデータの取得)

ゲームブックアプリちょっと参っています。


新しいゲームブックシナリオを、テキストあるいはURLを指定してネットから取り込む処理を書いていて、うまく行ったなあとテストをしていたのですが、なぜか二回目のネットから取り込みにエラーが発生します。


やっていることは、2022/07/23の記事の部分なんですが


外部データ取り込み色々テスト中9 外部データの取得(利用できる形で)成功!

https://ncode.syosetu.com/n5283hn/138/


色々調べていくと、暗黙のコールバック関数名が初回は”g_jsonp_callback_0”で問題なかったのが、2回目以降は”g_jsonp_callback_1”、”g_jsonp_callback_2”と末尾の数字が増えていくことを発見。


そもそも、この部分は対症療法的解決策で、十分に理解して書いていた訳じゃないので調査する必要があります。


まあ、最悪スクリプトでリロードさせるという方法もある訳ですが・・・



追記:

多分、これだ!と言う記述を発見


https://github.com/angular/angular/blob/main/packages/common/http/src/jsonp.ts

------------------------------------------

/**

* Get the name of the next callback method, by incrementing the global `nextRequestId`.

*/

private nextCallback(): string {

return `ng_jsonp_callback_${nextRequestId++}`;

}

------------------------------------------


return `ng_jsonp_callback_${nextRequestId++}でnextRequestIdを1増加させています。


これはリロードさせるのが安全かな・・・



注釈と日本語訳(Google)

// Every request made through JSONP needs a callback name that's unique across the

// whole page. Each request is assigned an id and the callback name is constructed

// from that. The next id to be assigned is tracked in a global variable here that

// is shared among all applications on the page.


// JSONP を介して行われるすべてのリクエストには、全体で一意のコールバック名が必要です

// 全てのページ。 各リクエストには ID が割り当てられ、コールバック名が作成されます

// そこから。 次に割り当てられる ID は、グローバル変数で追跡されます。

// ページ上のすべてのアプリケーションで共有されます。



追追記

URLからのデータ読み込み時は再起動(リロード)するように変更。

環境にもよると思いますが、ほぼストレスなしで読み込めそうです。


http://ajax-python.sakura.ne.jp/gamebookmaker/home

(HTTPSでは無いので、クリップボードイベントと使用メモリー量取得は使えません)

評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ