userChrome.jsでユーザーエージェントを変更
なんでこんなに蒸し暑い日が続くの??
Firefoxで、Microsoft BingのAI、Copilotを、制限なしで使うことが出来るようになった!
一昨日の記事で、ユーザーエージェントを変更するアドオンを紹介したけれど、アドオンではなく、userChrome.jsでユーザーエージェントを変更して、1スレッド5つの回答という制限なしで使えるようになったのである。
きちんと?するには、やはりアドオンの方がいい。
なぜなら、APIを使って、低レベルで、変更したユーザーエージェントを要求先に提示出来るから。
そのAPIが、「browser.webRequest.onBeforeSendHeaders.addListener」。
残念ながら、userChrome.jsでは、そういうことが出来ない。
けれど、userChrome.jsのスクリプトで、ユーザーエージェントを変更して、Copilotを使えるようにしたのである。
スクリプト全部を今回は出さないのは恐縮だけれど、調べて調べて、やっと見つけた情報をここに書いておき、それを元にそれぞれが作ってほしい。
まず、ロケーションバーに入力されるURLは、
gURLBar.value
とか
gBrowser.currentURI.spec
で取得可能。
URLを取得する情報は、ネットにはいくつもあったけれど、userChrome.jsの場合は、これでURLが取得出来るようだ。
次に、どのURLを対象に、ユーザーエージェントを変更するか、の判定。
今回、自分の場合は、bing.com全てに変更はしたくなかったので、URLの中から、キーワードを抜き出し、それを対象にした。
下記条件文は、Copilotが教えてくれたもので、スマートな判定になっていると思う。
const keywords = [["bing.com", "chat", "ai"],["bing.com", "microsoft", "copilot"]];
const isMatch = keywords.some(keywordSet => keywordSet.every(keyword => gURLBar.value.toLowerCase().includes(keyword)));
if (isMatch) {
// 処理
}
[]の中に登録されている値が、URLの中に全てあり、今回の場合は、2つの[]があるのだけれど、どちらかが条件を満たしていれば、という判定になっている。
もし、対象となるURLの数を増やしたいなら、[]を増やしていけばいい。
次は、ユーザーエージェントを取得する方法と書き換え方法。
EdgeUserAgent = Services.prefs.getStringPref("myEdge.useragent.override", "defaultUserAgent");
Services.prefs.setStringPref("general.useragent.override", myUserAgent);
前者は、Firefoxの「prefs.js」つまり、「about:config」で参照出来る設定項目から、ユーザーエージェントを取得している。
後者は、「prefs.js」のユーザーエージェントの項目に書き込みをし、元のFirefoxのユーザーエージェントに戻している。
Firefoxの場合は、「general.useragent.override」に、ユーザーエージェント情報が書き込まれている。
「about:config」で確認してみよう。
Edgeのユーザーエージェントを保持しておかないといけないのだけれど、スクリプトの中で、変数に代入してもいい。
でも、それだと、ユーザーエージェントを変更したい場合、いちいち、スクリプトを開いて変更しないといけない。
どうせ変更するなら、「prefs.js」にEdge用のユーザーエージェントを追加しておいて、そこを「about:config」で書き換える方がいいと思って、そうしている。
直接、「prefs.js」を変更しなくても、「about:config」で、追加・変更が出来る。
前者の「myEdge.useragent.override」が、今回、新規で追加した、Edge用のユーザーエージェントを格納する項目。
それを読み出して、変数に格納している。
最後は、これが今回の肝となるところ。
どのタイミングで、ユーザーエージェントを変更するか?
//gBrowser.tabContainer.addEventListener("TabOpen", スクリプト名.関数名.bind(関数名));
//gBrowser.tabContainer.addEventListener("TabSelect", スクリプト名.関数名.bind(関数名));
gBrowser.tabContainer.addEventListener("TabAttrModified", スクリプト名.関数名.bind(関数名));
色々と検証して、「TabOpen」「TabSelect」「TabAttrModified」が候補になった。
「TabOpen」は、そのまんまで、タブが開いた時に実行される。
が、ずーっとそのタブでやっている時はいいけれど、他のタブに遷移した時、ユーザーエージェントは、元のものに戻らないし、戻すにしても、「TabClose」で元に戻す処理を追加しないといけなくなる。
次に、「TabSelect」は、タブが選択された時に実行される。
例えば、Copilotを、バックグラウンドで開き、そのタブをクリックすると、ユーザーエージェントが変更されることになる。
そして、他のタブに遷移した時に、元のユーザーエージェントに戻すようにすればいい。
最後の「TabAttrModified」は、その両方のいいとこどりしたもの。
Copilotによると、「タブの属性が変更されたときに発火し」、
- タブのタイトルが変更されたとき: 異なるページを開いたときや、JavaScriptによってタイトルが変更されたとき。
- ファビコンが変更されたとき: ページのファビコンが変更されたとき。
- タブの他の属性が変更されたとき: 例えば、タブがアクティブになったり、読み込み中の状態が変わったときなど。
ということなので、「TabOpen」や「TabSelect」より柔軟性があるし、両方の機能を備えたような感じだ。
色々と検証した結果、この「TabAttrModified」が一番柔軟性があり、思うような動きをしてくれたので、これを採用することにした。
スクリプト全文を出していないのは恐縮だけれど、ある程度プログラミングが出来る人なら、これらの情報があれば、あっという間に出来ると思う。
そうでない人は、アドオンを使うのが無難。
(アドオンが頻繁に更新してくれないと、Edgeのバージョンが上がらない。オプション設定で、変更出来るようにしてくれていればいいんだけれどね。)
このスクリプトは、別に、Copilotだけではなく、他のサイトに対して、ユーザーエージェントを変更したい場合にも、もちろん、使える。
更に、自分で好きなユーザーエージェント、Chromeであれ、モバイル系のブラウザであれ、に変更出来るのがメリットだ。
ともかく、アドオンを入れることなく、userChrome.jsのスクリプトだけで、Copilotを制限なく使えるようになったのである。
これで、Firefoxでも、Copilotを存分に使える!
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- 定期的に出てくるこれ(2024.10.07)
- PC起動の最初の時だけ実行(2024.10.05)
- 音量を揃える(2024.10.03)
- 本物かどうか確認(2024.09.29)
- 不良セクタがあっても、HDDを使い続けられそう(2024.09.26)
コメント