今日もガクリ('A`)
きっと明日もまたガクリ?('A`)
2008 / 06
« «  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 2008年06月
meta 要素の name 属性値 keywords の内容を可変に…

meta 要素の name 属性値 keywords の内容を、記事単体表示の場合には可変にしてみました。ある種実験的な試みなので、内容にはまったく影響ありません…('A`)

バグ発覚…直ちに修正…('A`) みっともない PHP エラーを御覧になった方、ごめんなさい…('A`)

blog, WordPressno commentsno trackbacks(4,525)
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,960)
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)(12,335)
WordPress : 記事内で PHP コードを実行

WordPress の記事内に PHP コードを記述し、実行するプラグインがないかと検索してみました。Exec-PHPrunPHP の二つのプラグインが見つかりました

取り敢えず、後者の runPHP をインストール、ダッシュボードのプラグイン設定にて使用するように設定し、echo 文だけの PHP コードを記事に書き込み、投稿、閲覧しても何故か実行されません 1 次に前者の Exec-PHP をインストールし、同じようにテスト用の記事を閲覧するとこちらの方のプラグインは実行されました

このプラグインを入れておくだけでは面白くないので The people sending SPAM なるページを作って見ました。このページは WordPress に最初から同梱されているスパムブロッカーのプラグイン Akismet がスパムと判断したコメントの投稿者の IP アドレスを閲覧できるようにしたものです 2


  1. 時間のある時にソースコードを追って原因を調べたいと思います…('A`)
  2. これでわざわざダッシュボードまでアクセスしなくて済みそうです
WordPressno commentsno trackbacks(5,547)
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)(25,271)
contents
most viewed (1211742)
categories
archives
recent posts
recent updates
recent comments
recent trackbacks
912T ASUSTeK ASUSTeK Crosshair IV Extreme blog CSS DARK SOULS DARK SOULS 3 Darksouls3 DarksoulsIII DARK SOULS III DISM Euro Truck Simulator 2 Everquest II firefox foobar2000 game Install internet KB2990941 KB3087873 mod panels ui PCゲーム PHP PX-Q3PE Raid skin SoftBank software SpeedFan Spinel 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