Microsoft Update カタログ サイトが Internet Explorer の ActiveX の呪いから開放され、私が使用してる UA Firefox Quantum でもアクセスできるようになったので、ナレッジベース番号(以下、KB番号 と称します) リストを元に情報を取得する PHP スクリプトを作りました
ようやくまともな形に仕上がったので、正式リリースします。以下のファイルをダウンロードし、適当なディレクトリに解凍します
このファイルはスクリプト本体(MicrosoftUpdateSearch.php) と同じディレクトリに置いておく必要があります
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept-Language: ja,en;q=0.7,en-US;q=0.3
DNT: 1
このファイルの内容そのものが HTTP リクエストする際のヘッダーとして追加されます。ファイル形式は UTF-8, LF(改行), BOM 無しが望ましいです
このファイルはスクリプト本体(MicrosoftUpdateSearch.php) と同じディレクトリに置いておく必要があります
; 初期設定ファイル
; このファイルは MicrosoftUpdateSearch.php と同じディレクトリある必要があります
; 行頭 ; で始まる行、空行は無視されます
; 設定されるパラメーター名は大文字小文字区別されます
; Microsoft Update カタログ サイト設定
URI = 'https://www.catalog.update.microsoft.com/'
Serach_URI = 'https://www.catalog.update.microsoft.com/Search.aspx'
Detail_URI = 'https://www.catalog.update.microsoft.com/ScopedViewInline.aspx?updateid='
Download_URI = 'https://www.catalog.update.microsoft.com/DownloadDialog.aspx'
; 検索語(主にKB番号) に付与する接尾語
Search_Sufix = ' Windows 7 x64'
; 検索結果を絞り込む為の除外リスト
; 評価優先順位は左から右
; 否定を指定する場合は接頭語に ! を付与する
; 複数指定する場合は , で区切る
;
; 下記の例と言うと、Embedded を含む検索結果は除外され、
; 次に Windows 7 を含まない検索結果が除外されます
Search_ExcludeList = 'Embedded','!Windows 7'
; ログファイルの設定
LogFile = 'MictosoftUpdateSearch.' . date( 'Y-m-d_His' ) . '.log'
; コンソール出力するかどうかの設定 On ならば、コンソール出力される
LogEcho = On
; コンソール出力する際の文字エンコーディング
LogEchoEncode = 'SJIS'
; ログファイルに出力する際の文字エンコーディング
LogFileEncode = 'UTF-8'
; 個々のダウンロード URI に対するログ出力追加オプション
; 使用できる変数は以下に示します
; $n 改行(0x0d)
; $KB ナレッジベース番号(KB番号)
; $Date 最終更新日時
; $Title タイトル
; $Product 製品
; $Category 分類
; $Version バージョン
; $Detail_URI 詳細取得先 URI
; $Description 概要
; $Detail 詳細
; $Download_URI 更新プログラムの URI
LogOutOptions = ' <a href="$Download_URI" title="$Detail">$KB</a>$n',' <tr><td><a href="$Download_URI" title="$Detail">$KB</a></td><td>$Detail</td></tr>$n$n'
; ナレッジベース番号(KB番号) を記述したファイル
KB_ListFile = 'MicrosoftUpdateSearch.List.txt'
; ナレッジベース番号(KB番号) を記述したファイル
; このファイルはスクリプトを動かすディレクトリに置きます
; 行頭 ; で始まる行、空行は無視されます
; 複数にまたがって記述する際は以下の様に記述します
KB890830,
KB4344152,
KB4343900',
; 単一行で記述する場合は以下の様に記述します
; , 文字で区切ります
KB2990941,KB3087873,KB2533552,KB2534366,KB2670838,KB2732059,KB2773072,KB2834140
今後の修正予定です
OpenSearch maker なるモノを作ったもののマニュアルがないので作成…('A`)
各入力フィールドやチェックボックス、ラジオボタンなどを設定して、generate searchplugin ボタンを押す事によって、OpenSearch に対応している UA で使用できます。以下、各項目について、PHP の関数を検索を行うプラグインを作成する例にならって説明していきます
XML ヘッダーを出力する の項目をチェックする事によって XML ヘッダー が生成されるファイルの先頭に付きます。OpenSearch の仕様では、XML ヘッダー は付きません
- <?xml version="1.0" encoding="UTF-8"?>
必須項目で省略できません。設定した名前が Firefox の検索バーに表示されます
- <ShortName>PHP 関数検索</ShortName>
省略できます。検索エンジンの簡単な説明を記述します
- <Description>PHP 関数を検索</Description>
省略できますが、省略された場合 UTF-8 が使われます。GET および POST メソッドで検索エンジンに対してリクエストされる際のエンコードを指定します。ここで指定するエンコード文字セット名称は IANA Character Set Assignments を参照してください
- <InputEncoding>UTF-8</InputEncoding>
省略できます。検索バーに表示される縦16ドット、横16ドットのアイコンファイルを指定します。base64 をチェックすると、アップロードされたアイコンファイルを Base64 でエンコードします。チェックしないと URL エンコード されます。アップロード処理が何らかの原因でエラーになった場合はサーチプラグインファイルは生成されません
- <Image width="16" height="16">data:image/x-icon;base64,Qk02AwAAAAAAADYAAAAo… (省略)</Image>
必須です。検索エンジンのサイト URL を記述します。実際に検索が行われる URL でなければなりません。URL として正しくない値を入力するとエラーとなり、サーチプラグインファイルは生成されません
GET または POST のいずれかを指定しなければなりません。簡単に説明すると GET メソッドは検索エンジンサイトのホスト名や検索語などのパラメーターを URL としてリクエストします。一方、POST メソッドは URL とは別に検索語などのパラメーターをデータとして送信し、検索エンジンにリクエストします
- <Url type="text/html" method="POST" template="http://www.php.net/search.php">
GET メソッドを指定した場合の例を以下に示します。後述のパラメーターを指定する事によって以下の様に出力します
- <Url type="text/html" method="GET" template="http://blog.alphaziel.info/">
- <Param name="s" value="{searchTerms}"/>
- </Url>
GET メソッドを指定し、パラメーターを指定しなかった場合には以下の様に出力します
- <Url type="text/html" method="GET" template="http://blog.alphaziel.info/?s={searchTerms}" />
メソッドが POST の場合は必須です。検索バーで入力した検索語をサーチプラグインに渡す為のキーワード {searchTerms} は値のどこかに設定しなければ、サーチプラグインに検索語が渡りません。また。記述する名前、値のどちらかが欠けていれば、エラーとなり、サーチプラグインファイルは生成されません
- <Param name="pattern" value="{searchTerms}"/>
- <Param name="lang" value="ja"/>
- <Param name="show" value="quickref"/>
generate searchplugin を押す事によって、サーチプラグインを生成し、ダウンロードダイアログが表示されるのでダウンロードを行います。アップロードされたアイコンファイルや生成されたサーチプラグインはダウンロードの段階で削除されます
ダウンロードしたサーチプラグインファイルを Firefox のプロファイルディレクトリの中の searchplugins ディレクトリにコピーまたは移動し、Firefox を再起動します
Firefox はサーチプラグインによって、検索バーに検索エンジンを容易に追加できます。このサーチプラグインの仕様は Firefox 独自の MozSearch と、IE など他のブラウザでも使用できる OpenSearch の二つの形式をサポートしています
詳細な資料は MDC の Creating OpenSearch plugins for Firefox - MDC と Creating MozSearch plugins - MDC です。後者の MozSearch は Mozilla プロジェクトのみの仕様なので、非標準となっています
実際に自分で OpenSearch プラグインを作成して見ようと色々と試してみて、解った事
で、MDC の資料を見ながら、実際にこのサイト用の検索プラグインを作って、検索プラグインの自動検出もできる様にしてみました…ついでに、検索部分のテンプレート多少手直し…
検索プラグインを作成する際に、いちいちエディタを起動して…なんてめんどくさいので、OpenSearch maker なるものを作ってみました。右のコンテンツメニューからもアクセスできます
HTTP リクエストのメソッドが POST のサイトの場合、Proxomitron 1 などを使っていくつか検索プラグインを作ってみました。名前を付けてリンク先を保存(K)... でダウンロードしてください
Firefox 3 のロケーションバーにマルチバイト文字を入力して、サイトにアクセスすると正しく URL が渡らない。検索エンジンなどで使用すると、一部の検索エンジンで入力した文字列が正しくサイト側に伝わらず文字化けしてしまうという問題が…('A`)
ロケーションバーを見ると、何やら URL がエンコードされている様です…この件で検索してみると、やっぱり同じような問題が見つかりました。about:config の network.standard-url.encode-query-utf8 の値を true に変更する事で問題が解決しました
user_pref("network.standard-url.encode-query-utf8", true);
ところが、この問題は半分解決したといった方がいいでしょう。何故なら、この設定はサイト側の URL エンコード処理が UTF-8 の場合しか効果がありません。例えば 緑のgoo に以下の様に文字列を渡してやると、やはり文字化けします 1
http://green.search.goo.ne.jp/search?MT=漢字入力ですよ
入力エンコード指定の URL パラメーターにて、以下の様にエンコードを指定してやれば 緑のgoo に関しては、解決です
http://green.search.goo.ne.jp/search?MT=漢字入力ですよ&IE=UTF-8
サイト側でこの問題を解決する方法もあります。URL パラメーターとして入力された文字列をサイト側で処理すべき文字エンコードに変換してやればいいのです。以下の例は PHP の例です 2
- foreach ( $_GET as $key => $value ) {
- echo '1 key: ' . $key . ' value: ' . $value . "<br />\n";
- echo '2 key: ' . mb_convert_encoding( $key, 'UTF-8', 'UTF-8,SJIS,EUC-JP' ) . ' value: ' . mb_convert_encoding( $value, 'UTF-8', 'UTF-8,SJIS,EUC-JP' ) . "<br />\n";
- }
他の UA でも試してみましたが、Opear, IE6 は駄目でした。特に Opera 3 は酷く、ロケーションバーにマルチバイト文字を入力してエンターキーを押すと URL エンコードどころか、激しく文字化けし、4 しかもその文字化けしたデータをそのまま URL としてサイトにアクセスします。なので、サイト側で解決しても駄目です
どうも、この問題は思っていたほど根が深いようです。時間がある時に調べてみたいと思います
Firefox 3 において keyconfig アドオンを使用してのショートカットキーの割り当てです。私は合わせて functions for keyconfig も使用しています
通常、新しいウィンドウにページのソースが表示されてしまいますが、それを新しいタブ内に表示するように変更
- var sourceURL = 'view-source:' + content.document.location.href;
- gBrowser.selectedTab = gBrowser.addTab( sourceURL );
なぜか CTRL + I を押しても、サイドバーにブックマークが表示されてしまうので、ページ情報ダイアログを表示するように変更
- BrowserPageInfo();
ファンクションキーでタブの切り替えを行いたいので変更
- gBrowser.mTabContainer.advanceSelectedTab(-1,true);
ファンクションキーでタブの切り替えを行いたいので変更
- gBrowser.mTabContainer.advanceSelectedTab(+1,true);
現在表示しているページの URL をクリップボードにコピーします
- var w = window._content;
- var d = w.document;
- var txt = d.location.href;
- const CLIPBOARD = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
- CLIPBOARD.copyString(txt);
現在表示しているページのタイトルをクリップボードにコピーします
- var w = window._content;
- var d = w.document;
- var txt = d.title;
- const CLIPBOARD = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
- CLIPBOARD.copyString(txt);
現在表示しているページの URL とタイトル等の情報を元に HTML のアンカー要素を生成し、クリップボードにコピーします。本サイトのアンカー要素の生成はコレで行っています
- var w = window._content;
- var d = w.document;
- /* var l = d.documentElement.attributes[0].value; */
- var l = '';
- var txt = '<a target="_blank" hreflang="' + l + '" href="' + d.location.href + '" title="' + d.title + '">' + d.title + '</a>';
- const CLIPBOARD = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
- CLIPBOARD.copyString(txt);
3行目がコメントになってますが、ページの言語情報がページによってはうまく取得できないで、ここだけは手入力してます…('A`)
検索バーのサーチエンジンをキーボードの入力フォーカスを移す事なく切り替えます。トップの場合は最後の検索エンジンに切り替えます
- var search = document.getElementById("searchbar");
- var newIndex = search.engines.indexOf(search.currentEngine);
- if ( --newIndex < 0 ) newIndex = search.engines.length-1;
- search.currentEngine = search.engines[newIndex];
検索バーのサーチエンジンをキーボードの入力フォーカスを移す事なく切り替えます。最後の場合はトップの検索エンジンに切り替えます
- var search = document.getElementById("searchbar");
- var newIndex = search.engines.indexOf(search.currentEngine);
- if ( ++newIndex >= search.engines.length ) newIndex = 0;
- search.currentEngine = search.engines[newIndex];
前述の 検索バー切り替え↑ と 検索バー切り替え↓ と合わせて使うととても便利です
- var sel = window._content.getSelection( );
- var s = '';
- if ( !sel.rangeCount || sel.getRangeAt(0) == '' ) return ;
- for ( i = 0; i < sel.rangeCount; ++i ) {
- s += sel.getRangeAt(i).toString().replace( /^\s+|\s+$/g, '' ) + ' ';
- }
- s = s.replace(/[\+\s]+$/g,'');
- document.getElementById( "searchbar" ).doSearch(s, 'tab');
選択文字列(複数対応) を検索エンジン(googleの場合) で検索し、ページを新しいタブに表示します。14 行目を変更する事によって、他の検索エンジンや検索エンジンへ渡す URL パラメーターを変更できます
- var win = window._content;
- var doc = win.document;
- var sel = win.getSelection( );
- var s = '';
- var sURL = '';
- if ( !sel.rangeCount || sel.getRangeAt(0) == '' ) {
- return ;
- }
- for ( i = 0; i < sel.rangeCount; ++i ) {
- stmp = sel.getRangeAt(i).toString().replace( /^\s+|\s+$/g, '' );
- s += (encodeURIComponent(stmp) + '+').toString().replace(/%20/g,'+');
- }
- s = s.replace(/\++$/g,'');
- sURL = 'http://www.google.co.jp/search?q=' + s + '&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a';
- gBrowser.selectedTab = gBrowser.addTab( sURL );
選択文字列の中に空白が含まれている場合のバグを修正 (11行目)
選択文字列(複数対応) を検索バーの入力ボックスへセットします
- var win = window._content;
- var doc = win.document;
- var sel = win.getSelection( );
- var s = '';
- if ( !sel.rangeCount || sel.getRangeAt(0) == '' ) {
- return ;
- }
- for ( i = 0; i < sel.rangeCount; ++i ) {
- s += sel.getRangeAt(i) + ' ';
- }
- document.getElementById("searchbar").value = s.replace(/^\s+|\s+$/g,'');
検索バーをクリアします
- document.getElementById("searchbar").value = "";
Firefox を再起動します
- const nsIAppStartup = Components.interfaces.nsIAppStartup;
- var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
- var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"].createInstance(Components.interfaces.nsISupportsPRBool);
- os.notifyObservers(cancelQuit, "quit-application-requested", null);
- if (cancelQuit.data) return;
- Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup).quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);
再起動時に終了時の状態復元が必要なければ、2~5行目は不要です
Firefox を 2 から 3, 4 へアップグレードしたのはいいが、userChrome.css がほとんど反映されていなかったので、DOM Inspector を使いながら userChrome.css を修正していきました。この記事はそれをまとめたものです 1
幾つのバージョンからは不明ですが、ブックマークメニューの余計なセパレーターの非表示にできなかったのが、現行バージョン (3.6.13) で可能となったので、その部分の対応部分です
/* セパレーター (3.6.13) */
#bookmarksMenuPopup > menuitem:first-child + menuitem + menu + menuitem + menuitem + menuseparator + menu + menuseparator,
#bookmarksMenuPopup menuseparator[class="bookmarks-actions-menuseparator"]
{
display: none !important;
}
ブックマークツールバーは通常はアイコンとテキストの両方を表示してますが、私はブックマークツールバーに入れているブックマークアイテムのテキストは 1文字にしていますので、2 アイコンの表示は必要ないので、非表示にします
/**
* ブックマークツールバーフォルダのアイコン非表示
*/
hbox#bookmarksBarContent .toolbarbutton-icon
{
display: none !important;
}
hbox#bookmarksBarContent toolbarbutton[image*="data:image"] .toolbarbutton-icon
{
display: none !important;
}
.bookmark-item > .toolbarbutton-icon { /* 4.0 用 */
display: none !important;
}
私にとっては邪魔なだけなので、消えてもらいます
/*
* 検索バーの検索ボタン(虫メガネアイコン)を非表示
*/
#searchbar .search-go-button
{
display: none !important;
}
まったく使わないので消えてもらいます
/*
* メニューの「履歴」を非表示
*/
#history-menu
{
display: none !important;
}
邪魔なので消えてもらいます
/*
* ステータスバーのリサイズパネルを非表示
*/
#status-bar .statusbar-resizerpanel
{
display: none !important;
}
まったく使わないので消えてもらいます
/*
* ブックマークのメニューから以下の項目とその下のセパレーターを非表示にする
*/
/* このページをブックマーク */
#bookmarksMenuPopup menuitem[command="Browser:AddBookmarkAs"],/* このページを購読... */
#bookmarksMenuPopup #subscribeToPageMenuitem,
#bookmarksMenuPopup #subscribeToPageMenupopup,/* すべてのタブをブックマーク... */
#bookmarksMenuPopup menuitem[command="Browser:BookmarkAllTabs"],/* ブックマークの管理... */
#bookmarksMenuPopup menuitem[command="Browser:ShowAllBookmarks"],/* セパレーター */
#bookmarksMenuPopup #organizeBookmarksSeparator,/* よく見るページ 最近ブックマークしたページ
最近付けたタグ ブックマークツールバー */
#bookmarksMenuPopup .bookmark-item[label*="よく見るページ"],
#bookmarksMenuPopup .bookmark-item[label*="最近ブックマークしたページ"],
#bookmarksMenuPopup .bookmark-item[label*="最近付けたタグ"],
#bookmarksMenuPopup .bookmark-item[label*="ブックマークツールバー"],/* セパレーター */
#bookmarksMenuPopup menuseparator[builder="start"]
{
display: none !important;
}
修正、項目を加えました。凄く…スッキリしました
危険なので消えてもらいます
/*
* ブックマークのメニューから タブですべて開く とその上のセパレーターを非表示にする
*/
#bookmarksMenuPopup menuitem[label*="タブですべて開く"],
#bookmarksMenuPopup menuseparator[builder="end"]
{
display: none !important;
}
何故か 3 になってから色が変化しません…なので、背景色を変更します
/*
* ロケーションバーの背景色変更
*/
#urlbar[level="high"][pageproxystate="valid"],
#urlbar[level="low"][pageproxystate="valid"],
#urlbar[level="high"][pageproxystate="valid"] > :not(#identity-box):not(#urlbar-icons),
#urlbar[level="low"][pageproxystate="valid"] > :not(#identity-box):not(#urlbar-icons),
#urlbar[level="high"][pageproxystate="valid"] > :not(#identity-box)>:not(dropmarker):not(progressmeter):not(.progress-bar),
#urlbar[level="low"][pageproxystate="valid"] > :not(#identity-box)>:not(dropmarker):not(progressmeter):not(.progress-bar)
{
color: #000000 !important;
background-color: #e0ffff !important;
}
#e0ffff の部分はお好みで変更して使用します。Firefox 2 の時の色は #f5f6be です
ID や class 名称が変更になっているので、DOM Inspector で探し当てるのがめんどくさかった…特にブックマークメニューやセパレーターが ID, class 名が割り振られていないので、CSS Selectors を使用してやや強引にしてあります。取り敢えず、私の環境では無問題なのでコレで良しとします
日付 | 内容 |
2011/03/26 (土) | ブックマークツールバーのアイコンを非表示に に 4.0 対応部分を追加 |
2010/12/29 (水) | 現行バージョン (3.6.13) 対応部分 を追加しました |
前回の記事 今日もガクリ('A`) » Internet Explorer 終了のお知らせ に続き、Firefox 2 から 3 へアップグレードしました。 ダウンロードを行ったのはちょうど Spread Firefox | Download Day 2008 のイベントが開始された直後にダウンロードしました
このダウンロードイベントによる Firefox 3 の一日辺りのダウンロードカウントは全世界で約 830 万ほどになったようです
ダウンロードはしたものの、アドオンの関係でインストールは暫く様子を見ようかと思いましたが、インストールの準備の為にプロファイルディレクトリの中身を覗いててアドオンの問題を解決する方法 1 が思いついたのでインストールする事にしました
インストール手順は以下の様に行いました
起動し、まず驚いたのが、Firefox 2 の環境をキッチリと受け継いでくれた事。ブックマークもキチンと引き継がれました。2 あとはなんと言っても、全体的なブラウジングの速度が飛躍的に向上したこと。起動も速くなった事。と、私にとってはとても満足のいくアップグレードでした
ただ、幾つかのアドオンと userChrome.css 等が有効となって無い事が判明。この事に付いては別の記事に詳細を記述していこうかと思います
今まで使っていた IE コンポーネントブラウザからオサラバし、Firefox 2 へ移行しました。移行の最大の要因はやはり CSS の実装状況。コレに尽きます。IE は最もシェアがある WWW ブラウザなのに、最も CSS の実装状況が乏しいという状況に堪えられなくなったのと、本格的に此処のブログのテンプレートをなんとかしようと思い、テンプレートの編集と並行して移行作業も行いました。この記事はその時のメモとして書き残しておくものです
インストールはいたって楽でした。IE のキャッシュやクッキー、ページ閲覧履歴、ブックマークなどを勝手に取り込んでくれます。ただ、私の場合は Sleipnir 1.66 という IE コンポーネントブラウザを使っていたのでExtension Favorites Editor 1.12 を使って Sleipnir のブックマークをエクスポートし、Firefox 2 のブックマーク管理からインポートしました。これで、大まかな移行作業は終わり、如何に今まで以上に使い勝手を良くするかが課題です…
検索して調べみると user.js と userChrome.css で大体の所はカスタマイズできる様です。前者は主にオプションダイアログではできないディープな部分の設定で、後者は UI のカスタマイズを行います。私は実は Firefox を使うのは全く初めてというわけではなかったので、これらのファイルはテキストエディタを使用して編集しました。GUI にてこれらのファイルを編集する Add-ons もあるらしいです。user.js と userChrome.css はファイル名のプレフィクスからも解るように、Javascript と CSS ファイルです。ただ、user.js の関数名や変数名、userChrome.css のクラス名等は独自なので、これらの名称や内容の意味などの情報を得るには Knowledge Base - MozillaZine Knowledge Base や DOM Inspector などを使って調べます。DOM Inspector は Firefox に同梱していて、カスタムインストールでインストールする事により、選択インストールできます
カスタマイズ情報や Tips などはおいおい記事にしていきたいと思います