今日もガクリ('A`)
きっと明日もまたガクリ?('A`)
2020 / 09
« «  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
archive for the ‘internet’ category
Microsoft Update カタログ サイトから情報取得スクリプト Version 0.2.1

概要

Microsoft Update カタログ サイトが Internet Explorer の ActiveX の呪いから開放され、私が使用してる UA Firefox Quantum でもアクセスできるようになったので、ナレッジベース番号(以下、KB番号 と称します) リストを元に情報を取得する PHP スクリプトを作りました

前提動作環境

  • PHP 5.6.37 が動作する事。必要な extension は以下の通りです。7.x 系では確認していません
    • php_mbstring.dll
    • php_exif.dll
    • php_pdo_sqlite.dll
    多分、上記3つの extension があれば動作すると思います…
  • Firefox で Microsoft Update カタログ サイト をアクセスし、Firefox ユーザープロファイルに cookies.sqlite ファイルがある事。つまり、スクリプト内で Cookie を取得するのに、Firefox のユーザープロファイルにある cookies.sqlite から Cookie を取得している為です

制限事項

  • 実際に Microsoft Update カタログ サイトから 更新プログラムをダウンロードするものではありません。当初はこれを前提として考えていましたが、Microsoft Update カタログ サイト 自体が IIS とかいうどうしようもなく遅い Web サーバーで運用されている以上、更新プログラムをダウンロードできる URI を出力するという方向に切り換えました
  • 検索結果が複数ページの際は最初のページが検索対象となります。全てのページから情報を取得して、絞込み検索を行い…と、技術的には可能ですが Microsoft Update カタログ サイト 自体が遅いのと検索結果の次ページを取得するのに POST メソッドを使用しているのですが、Firefox の ウェブコンソールを見て渡しているデータを見て(今は)やる気なくなりました('A`)

ダウンロードとインストール

ようやくまともな形に仕上がったので、正式リリースします。以下のファイルをダウンロードし、適当なディレクトリに解凍します

内容

  • MicrosoftUpdateSearch.php
    スクリプト本体
  • MicrosoftUpdateSearch.ini
    設定ファイル
  • MicrosoftUpdateSearch.h.txt
    HTTP リクエストする際の追加ヘッダーを記述しておくファイル
  • MicrosoftUpdateSearch.List.txt
    実際に情報を取得したい KB番号 を記述したファイル。ファイル名は任意に指定できます

MicrosoftUpdateSearch.h.txt

このファイルはスクリプト本体(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.ini

このファイルはスクリプト本体(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番号 リストファイル

; ナレッジベース番号(KB番号) を記述したファイル
;   このファイルはスクリプトを動かすディレクトリに置きます
;   行頭 ; で始まる行、空行は無視されます

; 複数にまたがって記述する際は以下の様に記述します
KB890830,
KB4344152,
KB4343900',

; 単一行で記述する場合は以下の様に記述します
; , 文字で区切ります
KB2990941,KB3087873,KB2533552,KB2534366,KB2670838,KB2732059,KB2773072,KB2834140

To Do

今後の修正予定です

  • __construct 部分で初期化している変数を外部のファイルから取り込む
  • コマンドラインパラメーター $_SERVER['argv'] を有効活用する様にする
internet, PC, PHP, software, Windowsno commentsno trackbacks(1,495)
Badware サイト的なサイトを検索エンジンの検索結果から消えてもらう

Badware サイト的なサイトというのは、私にとってはそう見えるからこのような表現をしています。これはどのような意味かと言いますと、インターネット上(特に WWW で) で配布されているオンラインソフトウェアを作者に無断で転載し、また、オリジナルの配布形態を改竄して、ダウンロードできるようなサイトの事です。特に最近、この種のサイトの検索結果が本家本元サイトより上位に来るようになってウザイ事この上ないので、では、その種の検索結果を抹消してしまおうというものです

実態調査

Google 検索結果 1
Google 検索結果 1

では、先ずは、実態調査です。比較的メジャーなオンラインソフト CPU-Z を Google で検索して見ます。ウェブ全体から検索 での結果だと、上位 3位が本家本元サイトとなっていますが、赤い枠で囲まれたのが件の問題のサイトです。つまり、私のブラウザ表示領域での検索結果表示で、まともなのが、上位 3つの本家本元サイトと、インプレスの窓の杜のレビュー記事だけという事になります


Google 検索結果 2
Google 検索結果 1

では、今度は日本語のページを検索にて検索して見まし…た…が…('A`) この検索結果は酷いですな。本家本元サイトがひとつも表示されていません。最悪な事に最悪なサイトが検索上位 3位を占めるという結果になっています


Badware 配布サイト
Badware 配布サイト

では、この Badware サイト的なサイトとはどんな所なのか覗いて見ましょう。前述の検索結果で必ず出ていた brothersoft.jp ドメイン名から構成されるこのサイトを覗いて見ましょう。どんな所なのか、詳細を知るために Adblock PlusNoScript は切った状態で閲覧して見ました…

左右両端に表示されているスクロールしてもくっついてくる広告がウザ過ぎます。右側のナビゲーション部分を見ると、色んなソフトを無断配布している様がわかります。しかも、ここのアドレスが http://cpu-z.brothersoft.jp/ と、サブドメインにソフトウェア名を使用し、いかにも本家を装っている所がずる賢いですな


まぁ、結果は大体わかってますが、ダウンロードリンク をクリックして見ましょう…

Badware のダウンロードを試みる
Badware のダウンロードを試みる

はい。アウトです。とっととキャンセルします。さて、ここまででわかった事を纏めてみましょう

  • サブドメインを使用して、本家っぽく装っている
  • やたらと、広告が多い
  • いかにも、どこかの団体が、作者の許可を得て、ソフトウェアを配布しているサイトのように見えるデザイン
  • バージョン番号、リリースした日付、配布するファイルのハッシュ情報 1 等の記載がない
  • 上記のダウンロードダイアログウィンドウからもわかるように、オリジナルの配布形態を改竄している 2

対策

手っ取り早いのが、検索語にそのサイトを覗くキーワードを加えてやればいいのですが…

cpu-z -site:brothersoft.jp

こうする事によって、Google 等の検索エンジンが検索語からどれだけのサイトが除外(嫌われている) されているのか、わかるので、多くの人がこのサイト除外部分を検索語に入れる事によって、検索結果の順位も変わってくるだろうと予想しています。しかし、これでは、検索エンジンサイトの対応待ちとなるので、私のように必要な情報だけを素早く欲しい場合には向きません。また、この様なサイトは 1つや 2つだけじゃないので、その度に検索語に追加していかなければなりません


フィッシングサイトの報告
フィッシングサイトの報告

まぁ、これも即応的なものじゃないのですが、Firefox のヘルプ→偽装サイトを報告で報告してみるのも一つの手段ですね。配布形態を改竄している時点で偽装と言われても致し方ないでしょう 3

さて、ようやく、ここからが本題なんですが…前述した対策が根本的な解決に近いかもしれないが、時間が掛かり、解決できるのか不確定なので、即応的な対処で行こうと思います。つまり…検索結果は受信してしまうけど、ブラウザで非表示にしてしまおうという事です

ここで、登場するのが、私が普段常用している Proxomitron です


と、言う訳で手っ取り早くProxomitron のフィルターです

[Patterns]
Name = "Google | IgnoreList SearchResult"
Active = TRUE
Multi = TRUE
URL = "[^/]++.google.[^/]++/"
Limit = 4096
Match = "<!--m--><li class=$AV(g * w0) * > * <a * href=$AV(*$LST(BadWare)*) * <!--n-->"
        "$SET(0=<!-- Kill BadWare -->)"
Replace = "\0"
[Patterns]
Name = "search.goo.ne.jp"
Active = TRUE
Multi = TRUE
URL = "[^/]++search.goo.ne.jp"
Limit = 5120
Match = "<div class=$AV(res) > <a href=$AV(*$LST(BadWare)*) * > $NEST(<div*>,</div>) * </div>"
        "$SET(0=<!-- Kill BadWare -->)"
Replace = "\0"

フィルターの中で参照している BadWare リストを作ります。取り敢えず、この位入れて置く

#
# BadWare site
#
updatestar.com
japanese.trailsframework.org
++brothersoft.(jp|com)
all-freesoft.net
altech-ads.com
cowscorpion.com
filehippo.com
downpanda.com
dll-download-system.com
dll-files.com
softpicks.net
dll-download-jp.com
dlldump.com
seesaa.net
afterdawn.com

結果

Google 検索結果 3
Google 検索結果 3

ウェブ全体から検索 の結果です。すっきりしましたね


Google 検索結果 4
Google 検索結果 4

日本語のページを検索 の結果です。考えて見れば、日本語のページを検索 なので、ここに本家本元の検索結果が出ることはおかしいんですよね…それは、それとして、奇麗な検索結果となりました

参照


  1. 最近は徐々に増えてきましたが、配布ファイルのハッシュ情報を記載する人はまだまだですね
  2. この様に配布形式を改竄、しかも、実行ファイル形式なので、このファイルを実行するにはリスク覚悟になるでしょう
  3. 配布形式が、アーカイブから、実行形式に改竄されている時点で偽装と言ってもいいでしょう。この実行形式ファイルを実行するにはリスクが伴うし、そんなリスクを侵してまで改竄されているのかどうかの確認は不要でしょう

更新履歴

日付内容
2011/02/13 (日)
  • Badware サイトリスト更新
 
  • Proxomitron フィルターの goo バージョンの所で Replace が抜けていました
internet, PC, softwareno commentsno trackbacks(4,492)
WordPress Plugins : Akismet htaccess writer
Akismet htaccess writer 1.0.1
Akismet htaccess writer 1.0.1

ここのブログシステムに WordPress を使用していることはフッター表示で解ると思いますが、スパムブロックには Akismet という同梱プラグインを使用しています。非常に優秀なプラグインで、ほとんどのスパムをブロックしてくれます…が、しかし、ブロックした後の処理がないので件の様なプラグインを作成しました

概要

以下のようなケースの場合に .htaccess の更新を行うプラグインです

  • Akismet がスパムと判定したコメントが書き込まれた
  • ダッシュボードのコメントにて、スパムとしてマークした
  • ダッシュボードのコメントの編集にて、承認ステータスをスパムとして保存した

以上のケースの場合に、承認ステータスがスパムとなっているコメントを書き込んだ IP アドレスのリストをアクセス拒否として、.htaccess を更新します

.htaccess の更新内容は # BEGIN written by WordPress plugin - Akismet htaccess writer# END written by WordPress plugin - Akismet htaccess writer ブロック内で行われます。ブロックが存在しない場合にはファイルの末尾に追加で書き込まれます。以下、サンプルです

  1. # BEGIN written by WordPress plugin - Akismet htaccess writer
  2. Order Allow,Deny
  3. Allow From All
  4. Deny From aaa.bbb.ccc.ddd
  5. Deny From eee.fff.ggg.hhh
  6.   .
  7.   .
  8.   .
  9. Deny From www.xxx.yyy.zzz
  10. # END written by WordPress plugin - Akismet htaccess writer

要求仕様

  • Apache HTTP Server
  • PHP 5.x.x 以上
  • WordPress 2.5.1 以上 1

インストール

  1. ダウンロードした akismet-htaccess-writer.zip アーカイブファイルを解凍します
  2. 解凍した akismet-htaccess-writer ディレクトリをワードプレスの /wp-content/plugins/ へコピーまたは移動します
  3. ダッシュボードの プラグイン ページを表示し、使用する を選択します
  4. ダッシュボードの プラグイン » Akismet htaccess writer にて .htaccess ファイル名を設定します

.htaccess ファイル名が設定されていない、または書き込み可能ではないと .htaccess ファイルは更新されません。また、.htaccess ファイルを書き込み可能にする場合は、HTTPD プロセスが PHP モジュールを実行する際のユーザーに限定して、ファイル属性の設定を行う事を推奨します

ダウンロード

このプラグインに関して、決して Akismet プラグイン作者に連絡は取らないでください


  1. 他のバージョンでも動作するかもしれませんが、テストする余裕がないです…('A`)
internet, PHP, WordPresscomments (20)trackbacks (14)(27,880)
OpenSearch maker の使い方
OpenSearch maker 1.0.0
OpenSearch_maker 1.0.0

OpenSearch maker なるモノを作ったもののマニュアルがないので作成…('A`)

使い方

各入力フィールドやチェックボックス、ラジオボタンなどを設定して、generate searchplugin ボタンを押す事によって、OpenSearch に対応している UA で使用できます。以下、各項目について、PHP の関数を検索を行うプラグインを作成する例にならって説明していきます

各項目について

ヘッダーの指定

XML ヘッダーを出力する の項目をチェックする事によって XML ヘッダー が生成されるファイルの先頭に付きます。OpenSearch の仕様では、XML ヘッダー は付きません

  1. <?xml version="1.0" encoding="UTF-8"?>

検索エンジンの短い名前 : ShortName

必須項目で省略できません。設定した名前が Firefox の検索バーに表示されます

  1. <ShortName>PHP 関数検索</ShortName>

検索エンジンの説明 : Description

省略できます。検索エンジンの簡単な説明を記述します

  1. <Description>PHP 関数を検索</Description>

入力エンコード : InputEncoding

省略できますが、省略された場合 UTF-8 が使われます。GET および POST メソッドで検索エンジンに対してリクエストされる際のエンコードを指定します。ここで指定するエンコード文字セット名称は IANA Character Set Assignments を参照してください

  1. <InputEncoding>UTF-8</InputEncoding>

アイコン : Icon

省略できます。検索バーに表示される縦16ドット、横16ドットのアイコンファイルを指定します。base64 をチェックすると、アップロードされたアイコンファイルを Base64 でエンコードします。チェックしないと URL エンコード されます。アップロード処理が何らかの原因でエラーになった場合はサーチプラグインファイルは生成されません

  1. <Image width="16" height="16">data:image/x-icon;base64,Qk02AwAAAAAAADYAAAAo… (省略)</Image>

URL

必須です。検索エンジンのサイト URL を記述します。実際に検索が行われる URL でなければなりません。URL として正しくない値を入力するとエラーとなり、サーチプラグインファイルは生成されません

メソッド : Method

GET または POST のいずれかを指定しなければなりません。簡単に説明すると GET メソッドは検索エンジンサイトのホスト名や検索語などのパラメーターを URL としてリクエストします。一方、POST メソッドは URL とは別に検索語などのパラメーターをデータとして送信し、検索エンジンにリクエストします

  1. <Url type="text/html" method="POST" template="http://www.php.net/search.php">

GET メソッドを指定した場合の例を以下に示します。後述のパラメーターを指定する事によって以下の様に出力します

  1. <Url type="text/html" method="GET" template="http://blog.alphaziel.info/">
  2.   <Param name="s" value="{searchTerms}"/>
  3. </Url>

GET メソッドを指定し、パラメーターを指定しなかった場合には以下の様に出力します

  1. <Url type="text/html" method="GET" template="http://blog.alphaziel.info/?s={searchTerms}" />

パラメーター : Parameter

メソッドが POST の場合は必須です。検索バーで入力した検索語をサーチプラグインに渡す為のキーワード {searchTerms} は値のどこかに設定しなければ、サーチプラグインに検索語が渡りません。また。記述する名前、値のどちらかが欠けていれば、エラーとなり、サーチプラグインファイルは生成されません

  1. <Param name="pattern" value="{searchTerms}"/>
  2. <Param name="lang" value="ja"/>
  3. <Param name="show" value="quickref"/>

サーチプラグインファイルの生成、ダウンロード

generate searchplugin を押す事によって、サーチプラグインを生成し、ダウンロードダイアログが表示されるのでダウンロードを行います。アップロードされたアイコンファイルや生成されたサーチプラグインはダウンロードの段階で削除されます

サーチプラグインファイルのインストール

ダウンロードしたサーチプラグインファイルを Firefox のプロファイルディレクトリの中の searchplugins ディレクトリにコピーまたは移動し、Firefox を再起動します

参照

internet, softwareno commentsno trackbacks(17,867)
Firefox 3 : サーチプラグインについて

Firefox はサーチプラグインによって、検索バーに検索エンジンを容易に追加できます。このサーチプラグインの仕様は Firefox 独自の MozSearch と、IE など他のブラウザでも使用できる OpenSearch の二つの形式をサポートしています

詳細な資料は MDCCreating OpenSearch plugins for Firefox - MDCCreating MozSearch plugins - MDC です。後者の MozSearch は Mozilla プロジェクトのみの仕様なので、非標準となっています

実際に自分で OpenSearch プラグインを作成して見ようと色々と試してみて、解った事

  • 省略できない項目は OpenSearchDescription, ShortName, Url の3つ
  • ShortName は他のサーチプラグインと重複してはならない
    Firefox は起動時にサーチプラグインの検索をインストールディレクトリの中の searchplugins ディレクトリ、プロファイルディレクトリの中の searchplugins 順番で検索していきますが、ShortName が重複したプラグインがあると最初のプラグインが適用されます
  • Firefox インストールディレクトリにあるサーチプラグインは 検索バーの管理... で削除しても、インストールディレクトリの中の searchplugins ディレクトリからは XML ファイルは削除されないが、プロファイルディレクトリの中の searchplugins ディレクトリ内の XML ファイルは削除されてしまうので注意
  • Firefox インストール時に同梱されているサーチプラグインを誤って削除した場合は、検索バーの管理...初期設定に戻す ボタンを押せばいいです
Firefox 3.0 searchplugin
検索プラグインの自動検出

で、MDC の資料を見ながら、実際にこのサイト用の検索プラグインを作って、検索プラグインの自動検出もできる様にしてみました…ついでに、検索部分のテンプレート多少手直し…

検索プラグインを作成する際に、いちいちエディタを起動して…なんてめんどくさいので、OpenSearch maker なるものを作ってみました。右のコンテンツメニューからもアクセスできます

HTTP リクエストのメソッドが POST のサイトの場合、Proxomitron 1 などを使っていくつか検索プラグインを作ってみました。名前を付けてリンク先を保存(K)... でダウンロードしてください


  1. いずれ、このソフトの記事も書きたいと思います…('A`)
internet, softwareno commentsno trackbacks(6,022)
Firefox 3 : ロケーションバーにマルチバイト文字を入力

Firefox 3 のロケーションバーにマルチバイト文字を入力して、サイトにアクセスすると正しく URL が渡らない。検索エンジンなどで使用すると、一部の検索エンジンで入力した文字列が正しくサイト側に伝わらず文字化けしてしまうという問題が…('A`)

ロケーションバーを見ると、何やら URL がエンコードされている様です…この件で検索してみると、やっぱり同じような問題が見つかりました。about:confignetwork.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

  1. foreach ( $_GET as $key => $value ) {
  2.   echo '1 key: ' . $key . ' value: ' . $value . "<br />\n";
  3.   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";
  4. }

他の UA でも試してみましたが、Opear, IE6 は駄目でした。特に Opera 3 は酷く、ロケーションバーにマルチバイト文字を入力してエンターキーを押すと URL エンコードどころか、激しく文字化けし、4 しかもその文字化けしたデータをそのまま URL としてサイトにアクセスします。なので、サイト側で解決しても駄目です

追記

どうも、この問題は思っていたほど根が深いようです。時間がある時に調べてみたいと思います


  1. Google ではエンコード変換しているので文字化けしません
  2. mb_convert_encoding お約束ですが、この関数の3番目のパラメーターには決して AUTO は指定しないように…('A`)
  3. バージョン 9.50 と 9.51 で発生している現象です。9.27 では発生しません
  4. どうやら、JIS 変換してるような感じです…Shift-In/Out のエスケープコードが表示されます
internet, PHP, softwarecomments (2)trackbacks (2)(11,340)
Firefox 3 : アドオン keyconfig によるショートカットキー割り当て

Firefox 3 において keyconfig アドオンを使用してのショートカットキーの割り当てです。私は合わせて functions for keyconfig も使用しています

ページのソースを新しいタブに表示

通常、新しいウィンドウにページのソースが表示されてしまいますが、それを新しいタブ内に表示するように変更

  1. var sourceURL = 'view-source:' + content.document.location.href;
  2. gBrowser.selectedTab = gBrowser.addTab( sourceURL );

ページ情報ダイアログ表示

なぜか CTRL + I を押しても、サイドバーにブックマークが表示されてしまうので、ページ情報ダイアログを表示するように変更

  1. BrowserPageInfo();

前のタブ

ファンクションキーでタブの切り替えを行いたいので変更

  1. gBrowser.mTabContainer.advanceSelectedTab(-1,true);

次のタブ

ファンクションキーでタブの切り替えを行いたいので変更

  1. gBrowser.mTabContainer.advanceSelectedTab(+1,true);

コピー URL

現在表示しているページの URL をクリップボードにコピーします

  1. var w = window._content;
  2. var d = w.document;
  3. var txt = d.location.href;
  4. const CLIPBOARD = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
  5. CLIPBOARD.copyString(txt);

コピータイトル

現在表示しているページのタイトルをクリップボードにコピーします

  1. var w = window._content;
  2. var d = w.document;
  3. var txt = d.title;
  4. const CLIPBOARD = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
  5. CLIPBOARD.copyString(txt);

コピーアンカー

現在表示しているページの URL とタイトル等の情報を元に HTML のアンカー要素を生成し、クリップボードにコピーします。本サイトのアンカー要素の生成はコレで行っています

  1. var w = window._content;
  2. var d = w.document;
  3. /* var l = d.documentElement.attributes[0].value; */
  4. var l = '';
  5. var txt = '<a target="_blank" hreflang="' + l + '" href="' + d.location.href + '" title="' + d.title + '">' + d.title + '</a>';
  6. const CLIPBOARD = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
  7. CLIPBOARD.copyString(txt);

3行目がコメントになってますが、ページの言語情報がページによってはうまく取得できないで、ここだけは手入力してます…('A`)

検索バー切り替え↑

検索バーのサーチエンジンをキーボードの入力フォーカスを移す事なく切り替えます。トップの場合は最後の検索エンジンに切り替えます

  1. var search = document.getElementById("searchbar");
  2. var newIndex = search.engines.indexOf(search.currentEngine);
  3. if ( --newIndex < 0 ) newIndex = search.engines.length-1;
  4. search.currentEngine = search.engines[newIndex];

検索バー切り替え↓

検索バーのサーチエンジンをキーボードの入力フォーカスを移す事なく切り替えます。最後の場合はトップの検索エンジンに切り替えます

  1. var search = document.getElementById("searchbar");
  2. var newIndex = search.engines.indexOf(search.currentEngine);
  3. if ( ++newIndex >= search.engines.length ) newIndex = 0;
  4. search.currentEngine = search.engines[newIndex];

選択文字列を検索バーで現在選択されているエンジンで検索

前述の 検索バー切り替え↑検索バー切り替え↓ と合わせて使うととても便利です

  • Web ページ上の文字列を選択した後にアサインしたキーを押す事によって検索エンジンでの検索結果ページを表示します
  • CTRL キーを押しながらの複数選択文字列にも対応
  • サーチエンジンの検索結果は新しいタブに表示されますが、8行目の tabcurrent に変更する事によって、現在アクティブのタブに表示します
  • 検索バーには検索語は表示されません
  1. var sel = window._content.getSelection( );
  2. var s = '';
  3. if ( !sel.rangeCount || sel.getRangeAt(0) == '' ) return ;
  4. for ( i = 0; i < sel.rangeCount; ++i ) {
  5.   s += sel.getRangeAt(i).toString().replace( /^\s+|\s+$/g, '' ) + ' ';
  6. }
  7. s = s.replace(/[\+\s]+$/g,'');
  8. document.getElementById( "searchbar" ).doSearch(s, 'tab');
  • 選択文字列の中に空白が含まれている場合のバグを修正 (12行目)
  • さらにバグ…('A`) どうやら encodeURIComponent は必要ない模様… (12行目)
  • 7行目の修正と全体的に冗長なコードをまとめた

選択範囲を検索

選択文字列(複数対応) を検索エンジン(googleの場合) で検索し、ページを新しいタブに表示します。14 行目を変更する事によって、他の検索エンジンや検索エンジンへ渡す URL パラメーターを変更できます

  1. var win = window._content;
  2. var doc = win.document;
  3. var sel = win.getSelection( );
  4. var s = '';
  5. var sURL = '';
  6. if ( !sel.rangeCount || sel.getRangeAt(0) == '' ) {
  7.   return ;
  8. }
  9. for ( i = 0; i < sel.rangeCount; ++i ) {
  10.   stmp = sel.getRangeAt(i).toString().replace( /^\s+|\s+$/g, '' );
  11.   s += (encodeURIComponent(stmp) + '+').toString().replace(/%20/g,'+');
  12. }
  13. s = s.replace(/\++$/g,'');
  14. 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';
  15. gBrowser.selectedTab = gBrowser.addTab( sURL );

選択文字列の中に空白が含まれている場合のバグを修正 (11行目)

選択文字列を検索バーへ

選択文字列(複数対応) を検索バーの入力ボックスへセットします

  1. var win = window._content;
  2. var doc = win.document;
  3. var sel = win.getSelection( );
  4. var s = '';
  5. if ( !sel.rangeCount || sel.getRangeAt(0) == '' ) {
  6.   return ;
  7. }
  8. for ( i = 0; i < sel.rangeCount; ++i ) {
  9.   s += sel.getRangeAt(i) + ' ';
  10. }
  11. document.getElementById("searchbar").value = s.replace(/^\s+|\s+$/g,'');

検索バーをクリア

検索バーをクリアします

  1. document.getElementById("searchbar").value = "";

Firefox を再起動

Firefox を再起動します

  1. const nsIAppStartup = Components.interfaces.nsIAppStartup;
  2. var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
  3. var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"].createInstance(Components.interfaces.nsISupportsPRBool);
  4. os.notifyObservers(cancelQuit, "quit-application-requested", null);
  5. if (cancelQuit.data) return;
  6. Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup).quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);

再起動時に終了時の状態復元が必要なければ、2~5行目は不要です

internet, JavaScript, softwarecomment (1)trackback (1)(22,574)
Firefox : userChrome.css

Firefox を 2 から 3, 4 へアップグレードしたのはいいが、userChrome.css がほとんど反映されていなかったので、DOM Inspector を使いながら userChrome.css を修正していきました。この記事はそれをまとめたものです 1

現行バージョン (3.6.13) 対応部分

幾つのバージョンからは不明ですが、ブックマークメニューの余計なセパレーターの非表示にできなかったのが、現行バージョン (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 アイコンの表示は必要ないので、非表示にします

Firefox 3.0 bookmarks toolbar
変更前 : ブックマークツールバー
Firefox 3.0 bookmarks toolbar
変更後 : ブックマークツールバー

/**
 * ブックマークツールバーフォルダのアイコン非表示
 */
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;
}

検索バーの虫メガネアイコンを非表示に

私にとっては邪魔なだけなので、消えてもらいます

Firefox 3.0 searchbar
変更前 : 検索バー
Firefox 3.0 searchbar
変更後 : 検索バー

/*
 * 検索バーの検索ボタン(虫メガネアイコン)を非表示
 */
#searchbar .search-go-button
{
  display: none !important;
}

履歴メニューを非表示に

まったく使わないので消えてもらいます

Firefox 3.0 main menu
変更前 : メインメニュー
Firefox 3.0 main menu
変更後 : メインメニュー

/*
 * メニューの「履歴」を非表示
 */
#history-menu
{
  display: none !important;
}

ステータスバーのリサイズパネルを非表示に

邪魔なので消えてもらいます

Firefox 3.0 statusbar
変更前 : ステータスバー
Firefox 3.0 statusbar
変更後 : ステータスバー

/*
 * ステータスバーのリサイズパネルを非表示
 */
#status-bar .statusbar-resizerpanel
{
  display: none !important;
}

ブックマークメニューの不要な項目を非表示に

まったく使わないので消えてもらいます

Firefox 3.0 bookmark
変更前 : ブックマークメニュー
Firefox 3.0 bookmark
変更後 : ブックマークメニュー

/*
 * ブックマークのメニューから以下の項目とその下のセパレーターを非表示にする
 */
/* このページをブックマーク */
#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;
}

修正、項目を加えました。凄く…スッキリしました

Firefox 3.0 bookmark
さらに変更後 : ブックマークメニュー

ブックマークのメニューからタブですべて開くを非表示にする

危険なので消えてもらいます

Firefox 3.0 bookmark
変更前 : ブックマークメニュー
Firefox 3.0 bookmark
変更後 : ブックマークメニュー

/*
 * ブックマークのメニューから タブですべて開く とその上のセパレーターを非表示にする
 */
#bookmarksMenuPopup menuitem[label*="タブですべて開く"],
#bookmarksMenuPopup menuseparator[builder="end"]
{
  display: none !important;
}

HTTPS ページ表示時の ロケーションバーの背景色を変更

何故か 3 になってから色が変化しません…なので、背景色を変更します

Firefox 3.0 urlbar
変更前 : ロケーションバー
Firefox 3.0 urlbar
変更後 : ロケーションバー

/*
 * ロケーションバーの背景色変更
 */
#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) 対応部分 を追加しました

  1. 記事にする前に某掲示版の某スレッドへ書き込んでいました…('A`)
  2. 変わった使い方だって?そうですか…('A`)
internet, softwareno commentsno trackbacks(35,556)
Internet Explorer 死亡のお知らせ
Firefox 3.0
Firefox 3.0

前回の記事 今日もガクリ('A`) » Internet Explorer 終了のお知らせ に続き、Firefox 2 から 3 へアップグレードしました。 ダウンロードを行ったのはちょうど Spread Firefox | Download Day 2008 のイベントが開始された直後にダウンロードしました

このダウンロードイベントによる Firefox 3 の一日辺りのダウンロードカウントは全世界で約 830 万ほどになったようです

ダウンロードはしたものの、アドオンの関係でインストールは暫く様子を見ようかと思いましたが、インストールの準備の為にプロファイルディレクトリの中身を覗いててアドオンの問題を解決する方法 1 が思いついたのでインストールする事にしました


インストール手順は以下の様に行いました

  1. 以下の項目の Windows レジストリ をエクスポート
    • HKEY_LOCAL_MACHINE¥SOFTWARE¥Mozilla
    • HKEY_LOCAL_MACHINE¥SOFTWARE¥mozilla.org
  2. Firefox 2 をインストールしたディレクトリをバックアップコピー
  3. %APPDATA%¥Mozilla ディレクトリをバックアップコピー
  4. ダウンロードした Firefox Setup 3.0.exe を実行し、インストール
  5. セットアップウィザードに従ってインストール

起動し、まず驚いたのが、Firefox 2 の環境をキッチリと受け継いでくれた事。ブックマークもキチンと引き継がれました。2 あとはなんと言っても、全体的なブラウジングの速度が飛躍的に向上したこと。起動も速くなった事。と、私にとってはとても満足のいくアップグレードでした

ただ、幾つかのアドオンと userChrome.css 等が有効となって無い事が判明。この事に付いては別の記事に詳細を記述していこうかと思います


  1. extensions ディレクトリ内の各アドオンを格納しているディレクトリ内の install.rdf を書き換えて Firefox 3 を再起動して、強引に認識させてしまうという方法('A`)
  2. 私の場合は何も問題無くプロファイルは引き継がれたんですが、環境によってはうまく引き継がれないようです
internet, softwareno commentsno trackbacks(3,962)
Internet Explorer 終了のお知らせ
Firefox 2.0.0.11
Firefox 2.0.0.11

今まで使っていた IE コンポーネントブラウザからオサラバし、Firefox 2 へ移行しました。移行の最大の要因はやはり CSS の実装状況。コレに尽きます。IE は最もシェアがある WWW ブラウザなのに、最も CSS の実装状況が乏しいという状況に堪えられなくなったのと、本格的に此処のブログのテンプレートをなんとかしようと思い、テンプレートの編集と並行して移行作業も行いました。この記事はその時のメモとして書き残しておくものです

インストールはいたって楽でした。IE のキャッシュやクッキー、ページ閲覧履歴、ブックマークなどを勝手に取り込んでくれます。ただ、私の場合は Sleipnir 1.66 という IE コンポーネントブラウザを使っていたのでExtension Favorites Editor 1.12 を使って Sleipnir のブックマークをエクスポートし、Firefox 2 のブックマーク管理からインポートしました。これで、大まかな移行作業は終わり、如何に今まで以上に使い勝手を良くするかが課題です…

検索して調べみると user.jsuserChrome.css で大体の所はカスタマイズできる様です。前者は主にオプションダイアログではできないディープな部分の設定で、後者は UI のカスタマイズを行います。私は実は Firefox を使うのは全く初めてというわけではなかったので、これらのファイルはテキストエディタを使用して編集しました。GUI にてこれらのファイルを編集する Add-ons もあるらしいです。user.jsuserChrome.css はファイル名のプレフィクスからも解るように、Javascript と CSS ファイルです。ただ、user.js の関数名や変数名、userChrome.css のクラス名等は独自なので、これらの名称や内容の意味などの情報を得るには Knowledge Base - MozillaZine Knowledge BaseDOM Inspector などを使って調べます。DOM Inspector は Firefox に同梱していて、カスタムインストールでインストールする事により、選択インストールできます

カスタマイズ情報や Tips などはおいおい記事にしていきたいと思います

internet, softwareno commentsno trackbacks(4,571)
テンプレート公開にあたって、その1

ここのブログに引っ越しして当日早々、間違ってテンプレートを公開してしまった…('A`) それも、2度も。 まぁ、それはともかく、テンプレートを公開するにあたって色々と情報を整理してまとめなければなりませんので、 項目別にまとめてみました


コンセプト

  • XHTML 1.0 準拠
    目標としては w3.org の validate が通る事。これは既に通過しているので問題無し。 JUGEM 独自タグが生成する HTML はどうしようもないが…('A`)
  • CSS 2.1 準拠
    目標としては w3.org の validate が通る事。これも既に通過しているので問題無いが、CSS では特に 2.0 や 2.1 を 意識したコーディングを行っていない。何故なら対応ブラウザがないから
  • JavaScript に依存しない
    よくサイトを閲覧している時に感じるのが、ブラウザ側で JavaScript が有効でないと情報の閲覧がままならないという事。 JavaScript が有効ならばこういう事もできますよ。というのは別に構わないが、これを前提としたデザインはしない。 全てのサイト閲覧者が JavaScript を有効にしている訳ではないのだから
  • 画像などの外部リソースは使用しない
    あくまでもテンプレート部分に置いて別リソースが必要となるようなデザインはしない。 とにかくブラウジングが軽く、素早く表示される事

特徴

  • XHTML 1.0 準拠
  • CSS 2.1 準拠
  • JavaScript が無効でもデザインは基本的に変わらない
  • 画像未使用(テンプレートのみ)
  • 使用配色は 2色(アンカー、ハイパーリンク部分は除く) なので、配色変更が容易
  • 相対単位を用いているので閲覧者は好みのフォントサイズで閲覧できます

文書(HTML) 構造

<html>
<head>
<body>
<div id="wrapper">
<div id="layout">
<div class="sitetitle"> サイトタイトル
<div class="description"> サイトの説明文
<div class="calendar"> カレンダー(水平)
<div id="box"> 全てのカラムを含むボックス
<div id="main"> 左カラム
<div class="entry_navi"> 記事ナビゲーション
<div class="entry"> 記事本分
<div class="entry"> コメント
<div class="entry"> トラックバック
<div class="entry"> プロフィール
<div class="navi"> ページナビゲーション
<div id="#side"> 右カラム
<div class="linktitle"> selected entries
<div class="linktext">
<div class="linktitle"> latest entries
<div class="linktext">
<div class="linktitle"> categories
<div class="linktext">
<div class="linktitle"> archives
<div class="linktext">
<div class="linktitle"> recent comment
<div class="linktext">
<div class="linktitle"> recent trackback
<div class="linktext">
<div class="linktitle"> フリースペース1~5
<div class="linktext">
<div class="mobile_title"> mobile QRコード画像の表示
<div class="mobile_text">
<div class="linktitle"> profile
<div class="linktext">
<div class="search_text"> search this site.
<div class="search">
<div class="linktitle"> sponsored Links
JUGEM ad 削除不可
<div class="linktitle"> RECOMMEND コメントのみで削除済
<div class="linktext">
<div class="linktitle"> admin, RSS, ATOM へのリンクなど
<div class="linktext">
<div class="copyright"> コピーライト表示。削除不可

う~ん…こうして見ると、内容は違うのに全く同じスタイルを適用している所があるな…この辺は要検討です


後は、設定方法、免責事項を等を考えればいいですね…近日中に公開…できると、いいナァ…('A`)


internetno commentsno trackbacks(3,545)
久々に HTML/CSS 再勉強した

JUGEM に移ってきてから久しぶりに HTML/CSS 再勉強しました。仕事で偶にコンテンツ作成などもやるんですが、 ほとんどが原稿データを流し込んだり、HTML 生成スクリプト の作成や保守なので、腰を据えての CSS を 編集したのは久しぶりです

普段使用しているブラウザは Sleipnir というタブブラウザで、バージョンも前世代の 1.66 を使ってたりします。 このブラウザは IE コンポーネントを使用しているので、自然、IE のレンダリングエンジンを使う事になりますが、 使っている IE のバージョンが 6 なので、テンプレートを編集している合間に CSS の対応状況なんかを調べたりしましたが、 CSS2 を完全に対応しているブラウザがまだない事に驚きました。IE, FireFox, Opera などが対応している セレクタ、プロパティが多いようですが、ブラウザによっては実装が誤っていたり、 また、その誤った実装が多く広まったりして、相変わらず混乱している様です

…と、ここのテンプレート編集に関しては、難しい事を考えずに編集してます。今の所自分しか使わないし…




internetno commentsno trackbacks(2,696)
contents
most viewed (960632)
categories
archives
recent posts
recent updates
recent comments
recent trackbacks
912T ASUSTeK blog CSS DARK SOULS DARK SOULS 3 Darksouls3 DARK SOULS III DarksoulsIII DISM Euro Truck Simulator 2 Everquest II firefox foobar2000 foo_custominfo game Install internet KB2990941 KB3087873 mod panels ui PCゲーム Pear PHP PX-Q3PE Raid skin SoftBank software SpeedFan Steam TPS trailer truck TvRock TVTest Windows Windows 7 Win Toolkit WordPress インストール ダークソウルズ 初音ミク 窓辺ななみ
mobile
qrcode:home
profile
曇り札幌市中央区 ‘ 曇り
気温: 10℃ ‘ 湿度: 66%
recommends
Valid XHTML 1.0 Transitional Valid CSS X.X
RSS 2.0 RSS 0.92
RDF/RSS ATOM
get Firefox 2 get Opera
ie