« 遠くから | トップページ | ダブルの効果 »

2024年9月10日 (火)

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を存分に使える!

|

« 遠くから | トップページ | ダブルの効果 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 遠くから | トップページ | ダブルの効果 »