なげやりろぐ

フテイキコウシン

出遅れてますけど・・・

Sleipnir 3に向けてのアナウンスがありましたね♪

あわせて3の機能の一部であるGecko Viewerをお試しできる Sleipnir Gecko Preview Ver.が提供されていますが、どうやらこれは現行バージョンのテスト版を少し煮詰めたヤツに新しいプラグインをいくつか追加したモノのようです。
バージョン表記で確認出来ますがどうやらtest20相当ということになるのでしょうかね。


すでにあちこちで取り上げられていますので、今更何を書くことがあろうか・・・ってな感じですけど(笑)


ただ、ワタシの環境においてちと気になった事があったのでそこにだけ触れておこうかなと。

と、いうのは現在利用中のtest5にプレビュー版を上書きで利用できるということはチラリとアナウンス*1されていますが、ワタシがそれを試したところ新しいプラグイン類がひとつも有効にはなっていなかったのですよ。
具体的にはGeckoToolbar.fxがEmbeddedToolBarかもしくはToolbarモジュールどちらかに登録されているべきところがどちらにも見当たらず、StatusBarモジュールにもGeckoStatus.fxが未登録という状態。
まぁ単純に考えればわかることですけど、プレビュー版を一度も起動せずにそのまま上書きしたところで必要なファイルが作られていないということですね。
かといってプレビュー版を事前に立ち上げてGecko周りが有効になったファイルをそのままtest5へと上書きすると今度はuser.iniやOverrideフォルダ以外の設定ファイル群がまっさらになってしまうので以前の環境が失われてしまいます。


結論から言えばSleipnir Gecko Preview Ver.はtest5への上書きはせず、新規に環境構築するつもりで利用した方が間違いはないって事でしょうかね(笑)

HLRも2.0へとメジャーバージョンアップ!

Sleipnir Startはてブリーダー使い出すとついHLRでのフィードチェックをおろそかにしてしまいがちな昨今ですけど、なんだかとっても強力になってやってきましたよ、Headline-Reader Plugin

表示形態を3種選べるというのがイイですね♪ ネットブックでもコンパクトモードにすれば見出しの確認も楽ちんですし、ワイドモードは昨今のフルHD対応ワイドモニタでの利用に最適です。
もちろん従来どおりの表示も可能でラベルやスターによる記事管理ができるのが(゚∀゚)ラヴィ!!
以前はお気に入り記事をクリップするために紙copiなんかを利用してローカルへ残していましたけど最近は常時ネットへと繋がっているのでEvernoteがメイン。
でもそこまでして残すまでもない、というかいずれはサイトが消失してもかまわない程度のお気軽ブクマ程度ならHLRでの管理で十分ですね。
何と言ってもカラフル♪


さぁ、あとは 本体である Sleipnir 3β の登場を待つばかり!


いつでも来いやぁ!!(`・ω・´)

*1:コメント欄参照: http://www.fenrir.co.jp/blog/2010/10/next_sleipnir.html

Chrome Frame 安定版リリースだそうで・・・

早速導入してみましたよ♪
今回のものは右クリメニューもしっかりとローカライズされていました。
Google Chrome Frame

ただ、例によってインストールしただけではサイト側が対応してくれていないとChrome Frameによるページのレンダリングは行われませんし、gcfプロトコルも有効になっていません。
前回のβ版のときにはレジストリの当該箇所にEnableGCFProtocolというDWORD値を追加して値を1にセットすることで有効になりましたが、今回はそのあたりに変更があったようです。
また、レジストリに追加で利用できる値も大幅に増えていますので弄り甲斐があります♪
このあたりの詳細についてはDeveloper Guide(英語)を参照してくださいね。


さて、SleipnirGraniChrome Frameを有効利用するにはとりあえず gcfプロトコルを有効にしてやらないといけません。
先にChrome Frameのインストールを済ましておいてからレジストリエディタを開いてHKEY_CURRENT_USER\Software\Google\ChromeFrameへ移動します。
右ペインの何もないところを右クリック。メニューから新規DWORD値を作成し、名前をAllowUnsafeURLsとします。
次に作成したAllowUnsafeURLsを右クリックして修正を選択。値のデータへ数字の1を入れて確定。
以上でgcfプロトコルが有効になります。

・・・ていうか以下のコードをテキストエディタへコピペして適当な名前+拡張子regで保存して右クリメニューから結合を選択するだけでOKです。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Google\ChromeFrame]
"AllowUnsafeURLs"=dword:00000001

コレでgcfプロトコルが有効になりましたので適当なページを開いてからアドレスバーの文字列の先頭に gcf: を付加して移動してみましょう。
たとえば
http://www.google.co.jp/
であれば
gcf:http://www.google.co.jp/
と、いったようにします。
コレでアドレスバー右側の移動ボタン(EnterでもOK)を押すと・・・あれっ?


そう、真っ白なページが出現しましたね(笑)


どこでもいいので真っ白なビューの適当なところをクリックしてやるとページが現れます。
この変な挙動はβの時に解消されていたはずだったんですけどね、なぜか以前の状態に戻っちゃいました(´・ω・`)
ただ、ブックマークレットでgcfプロトコルを付加してあげると一発で開いてくれますので普段はコレを利用した方が便利かも。

javascript:location.href = 'gcf:' + location.href

他にメニューエディタでブラウザ標準/アンカーへアクションとして登録する方法を以前紹介しましたが、新規ウインドウで開くためにwindow.openを使った以下のコードだとポップアップブロックに引っかかるという問題がありました。

URL = "javascript:(" + function(){
window.open ('gcf:' + location.href,'_blank');
} + ")()";

そこでSleipnir APIのテキストを読み返してみたらNewWindowというのがあるのに気づいたのでこちらを使ってみたところ問題なく開けることを確認しましたのでもし以前のモノをお使いの方がいたら変更をお勧めします♪

sleipnir.API.NewWindow('gcf:' + location.href,true);

たった1行のシンプルなモノになりました♪*2

ただしこの方法でも開いたページはビューを一度クリックしてやらないとダメでした><
なんとかスクリプトだけでWebKitのビューをクリックできないモノかと模索してみたのですがあえなく討ち死に・・・
以前良く使っていたAutoHotKeyを使ってやれば簡単なんですけどね。*3


でも、IE9が利用できないXPユーザーの方には是非とも試していただきたいですね。
特にSleipnir StartGoogleの各種サービスみたいなjavaScript使いまくりのサイトでサクサク動作するのを体験したらIE7/8には戻りたくなくなりますよ♪


あ、そうそう。中身はGoogle Chromeと同等なので例の翻訳バーも出現します(笑)

*1:ブックマークレットでの利用はお気に入りへ登録するとき適当な名前にしてアドレス入力欄へコードをコピペします

*2:Graniな方は文頭の"sleipnir"を"grani"へと書きかえてください。

*3:AutoHotKeyとのコンボスクリプトが欲しいという方がいれば配布を考えます。

IE9βきたよんワチョ――ヽ(・∀・)ノ――イ♪

Sleipnir使いな人にとっても気になるIE9の動向ですが、UIの素っ気ないプレビュー版を二度経て事前予告予告通りのβ版がダウンロード出来るようになりました。
これがまた結構な完成度で日本語版も用意されていますので試さない手は無いです。
ただし、現存のIE7もしくは8の環境に上書きされちゃいますのでお試しだけにしておきたい人は事前にシステムの復元ポイントを作成しておいた方が安心かもです。

で、どうなの・・・?

IE9βを入れることによってSleipnirが何らかの恩恵をうけられるのかってことですよね。
結論から言うと『YES』です。
HTML5レンダリング、ならびにCSS3に準拠したサイトを訪れてみると一目瞭然。*1
そういったサイトを探すのが手間な方はIE9β Test Driveへアクセスして用意されているいろんなコンテンツを試して見るといいでしょう。


これは言い換えるとsystem32に登録されているHTMLレイアウト用のTridentエンジン(実体はmshtml.dll)がIE9βのものに置き換わっているため、以前のIE7もしくは8のファイルは利用出来なくなっているということを指します。


javascript用の新エンジン(Chakra)もjscript9.dllという名前でsystem32へ登録されていますが、そのままではSleipnirで利用することは出来ず、従来型*2jscript.dllが利用されてしまうようです。

で、当然ヒトバシラーなワタシはjscript9.dllとjscript.dllのフルコントロール権限を奪取した上で別フォルダへjscript.dllのオリジナルを待避。
そしてsystem32にあるjscript.dllをさくっと削除したのちjscript9.dllをsystem32へ複製し、それをjscript.dllへとリネーム。
ブラウザを立ち上げ直してSun Spiderベンチを確認したところトータルでノーマル(jscript.dll)時の軽く100倍速という結果を確認出来ました♪

system32いじるの怖いって方向けtips

実はIE6が出た当時からあるtipsなのですけど、IEの新機能をSleipnirで利用するための手段として実行ファイル名をIEのものに偽装するという手がありました。
IE6当時、画像ファイルをブラウザで開くとビュー内に小さなツールバーが現れてごにょごにょ出来るという機能(イメージツールバー)があったんですけどそれをSleipnirでも有効にするためにはbinフォルダ内にあるSleipnir.exeをiexplore.exeにリネームして実行すると利用出来るようになるというもの。
どうやら今回のIE9βでもその手が有効なようです。*3

実際に仮想環境の2008serverで試して見ましたが、ばっちりjscript9.dllが有効になっってくれました♪
やり方は上に書いたとおりSleipnirインストールフォルダ>bin>Sleipnir.exeをiexplore.exeにリネームするだけ。
あるいはSleipnir.exeを複製しておいて、一方をiexplore.exeにしてしまうのもアリですね。
ショートカットを二つ用意しておけば以前のjscript.dllと新しいjscript9.dllでのベンチを比較するのが簡単になりそうです♪

現状での問題点

新しいとはいってもまだβ。
ましてやSleipnirなどでの利用を想定してリリースされているわけではないでしょうし、Sleipnir側の対応もこれからでしょうからアレなんですけど、致命的とは言わないまでもやはり現状ではちと厳しい問題があったりします。
いま確認出来ているのは

  • ダウンロードリンクをクリックしても反応しない場合がある。
  • 動作しなくなったスクリプトがある。

以上2点です。
ダウンロードリンクが反応しないのは、多分IE9βで採用された新しいダウンロードダイアログの実装にSleipnirが対応できていないせいだと思われます。
IE9β側で試すとわかりますが、以前のようなダイアログウインドウではなくビューの下へ要素を追加した感じで現れるようになっています。

これは利用出来ないとなるとかなり困っちゃいますので、何とかするとすればダウンロード用プラグインとして用意されているLorikeetを導入するか、あるいは他ののブラウザエンジンに切り替えるしかないですね。*4
ただ、時々以前のスタイルのダイアログが出現してくれることもあるのでこのあたりはβゆえの不安定さなのかなとおもってみたり。


それとスクリプトも一部のコードが問題らしく、outputドックが頻繁に『こんにちは』してきます(´・ω・`)
これはSleipnirの内部的なモノなのかSeahorse側の対応でなんとかなるのかよくわかりませんが*5、いずれにしろまだまだβリリースでのことなのでMSとFenrirの動向をながーい目で見守っていきまっしょい♪

test5もきました

IE9β入れているとGmailで不具合が発生するそうな。
暫定対策らしいので仕事でGmailを頻繁に利用している方などはIE9β自体、インスコしない方がいいかもですね・・・(´・ω・`)

Sleipnir Part245
http://hibari.2ch.net/test/read.cgi/win/1284558177/41

41 名前:たば ◆taba/PbPvA [sage] 投稿日:2010/09/17(金) 17:26:31 ID:93NIu4rz
たばです。test5 です。
test 版の趣旨がわかるかたのみ、お使いください。

※Windows XP 以降でしか動きません。
※問題のあるプラグインは読み込まないようにしています。
2.8.5 test11 より前の環境から上書きして使う場合はプラグインの再インストールが必要です。

http://extensions.tabbrowser.jp/labs/yasuyuki/test5.zip

test 版用プラグイン置き場
http://extensions.tabbrowser.jp/labs/yasuyuki/plugins/

[新機能]
IE9 に暫定対応した。(たば)
IE9 環境で Gmail が正常に動作しないので暫定的に対応しました。 Gmail の一部機能は IE9 でも動かないことがあります。 IE7 互換モードに切り替えて使って下さい。 IE9 のときは IE8 モードにはできません。

*1:ただしcssの解釈を最新の状態にするにはレジストリを弄る必要があります。詳細は本スレに記されていますがtest5でとりあえず利用可能になったようです。http://hibari.2ch.net/test/read.cgi/win/1284558177/25

*2:というかタイムスタンプを見る限りjscript9.dllと同時に刷新されているようなのですが性能向上は確認出来ませんでした。

*3:元ネタはTwitterのTLからなのですが、つぶやきをロックされている方なので内容のコピペは出来ません。

*4:ちなみにロリキートを有効にしてダウンロードリンクを踏み、Lorikeetをキャンセルするとおなじみのダイアログが現れました。意味ないけどw

*5:ざっと挙動をチェックしてみたところ、Seahorseスクリプトにおいては@Type SleipnirScriptがヘッダへ記されているわけでもないのにSleipnirScriptとしてしか動作していないような感じでした。試しに通常のdocumentを_documentへ置き換えてやるとエラーを吐かなくなり、location.hrefにも先頭に_documentを追加したら正常動作になったりとか・・・ユーザーアクションスクリプトも同様な挙動です。

Google Chrome風のアレを作ってみた『その2』

今度のはGraniでも導入が簡単だよ!

設置方法は最後の方にありますので駄文は飛ばしていただいても結構ですよ〜(自虐)


前回、自分のスキルに見合った方法で適当にでっち上げたGoogle翻訳Dockみたいなものはあまりにも稚拙であったため、ハッキリ言って導入の手間に見合うだけの判定精度も無く使い勝手もいまいちな物でした。

そこでせめて導入の手間だけでも減らせるようにしたいなと慣れないjavaScriptと格闘しつつ、Seahorseスクリプトだけで完結できる物を作ってみようと手を付けはじめてつぶやき処のTLへ習作のスクショを上げた矢先、多分前作のあまりのつたなさを見かねたのでしょう(笑)、Sleipnirのスクリプトをいろいろ作って我々ユーザーに提供してくれているあの8th_713さんがチャチャッと作ってコレでどう? てな感じでgistにアップしてくれました。
その後しばらくしてよりいっそう作り込まれた物も上がってきましていやもうコレは出る幕はないなと。

  • こんな感じに表示されます


ただ、gistの性質上rawから落としたファイルの文字コードutf-8なのでそのままだとShift-Jisが前提のSeahorseではユーザースクリプトととして利用できません。
そこで、オリジナルのスクリプトの文字コードだけを変えて保存し直した物をこちらへ上げておきます。

見た目にちとこだわりたい

スクリプトとしては上記の物で一応完成されているのですが、作者さんからライセンスフリーで提供するから見た目などを弄って公開してもいいよと言うお許しがでましたのでワタシなりに弄ってやろうといろいろと手を加えてみました。
当初は以前のデザインを踏襲しつつ、Seahorse版ということでワタシが勝手にイメージしているライトスカイブルーを背景色にしたものを作っていたんです。

  • 最初はこんな感じで行こうかなと・・・


ただココでちょっと待てよ、と。


実はGoogle Chromeのアレみたいに除外サイトをワンタッチで登録できる機能がついているわけではないので、あまりビューを占有しすぎるのもそのうちうざくなってきそうだなと。
そこで、できるだけ目立たない、というかバーが出現していてもビューの閲覧に邪魔にならないサイズでいて使い勝手も損なわない方が良いのでは無いかなと考え、さらにはバーに表示している文言が長いとオマケのボタンにも被っちゃう場合があるな・・・てなわけでワンアクションで済むところをあえて2アクションで翻訳ボタンが出現するようにしてみたり。
最初に出現するバーは普通サイズの文字がとりあえず表示しきれる高さに抑え、右側にはクローズボタンを配置。
バーそのものをクリックすることで翻訳ボタンなどが並ぶちょいと太めのバーが出現するといった作りになっています。
またバーそのものにはIE(Trident)エンジンのみが使えるDirectX利用の透過効果を与えてありますので、ビューをスクロールするとバーの下のコンテンツが透けて見えるようになっています。*1

  • 最初に出現するバーはこのくらい。透過率は85%とチョット濃いめで必要ないときはこの時点で右のxを押して消せます。

  • 最初のバーをクリックして切り替わるバーは透過率70%。後ろの文字がしっかりと確認出来ます。

さてその中身は・・・

まぁ興味のない方は読み飛ばして貰って結構です(笑)

例によってコードを晒しておきますね、スクリプター諸氏からみたらなんて無駄なことを・・・と叱られそうでコワイのですが・・・

  • これはGrani用に用意した物です
// このスクリプトが反応して欲しくないサイトがある場合には
// 下の例にならってそのサイトのドメインを除外登録してください。
// まず、スラッシュふたつ // のあとへ半角スペースあけて @exclude を追加し
// そのあとへ続けて半角スペースあけてドメイン名までのアドレス+アスタリスク[*]
// を追加するとそのサイトは除外されます。
// 
// ==UserScript==
// @name Google_Translate_for_Seahorse
// @description 日本語じゃないページを見つけるとGoogle_Translateで翻訳するか聞いてくる
// @include http*
// @exclude http://translate.google.*
// @exclude http://google.*/*
// @exclude http://twitpic.com/*
// @exclude http://seesmic.com/*
// @exclude http://www.tumblr.com/*
// @auther org by 8th_713 / design mod by Kei_F
// @licence free license
// ==/UserScript==
(function(_d){

// ここで画像ディレクトリの設定を行います。パスの記述はローカルファイルへのフルパスとなります。
// Graniユーザーの方で、インストーラーでの設定変更なしにインストールされた方はそのまま何もせずに利用可能なはずです。
// しかし初期に配布されていたGraniの場合、設置ディレクトリ名が”Fenrir & Co”の物も存在するようですのでその場合は
// ”Fenrir Inc”を”Fenrir & Co”へと書きかえてください。
// それ以外にインストールパスを変更している方は適宜、書き換えをお願いします。
// ディレクトリの区切りは\1個ではなく\\2個であることにご注意ください。
// 最後の二つはシングルクォートの中にダブルクォートが入れ子になっています。(HTMLへ値を渡しているため)

// Grani用設定ここから (32bit版OS)

var clsm = 'C:\\Program Files\\Fenrir Inc\\Grani\\plugins\\seahorse\\Google_Translate_for_SH\\close_m.png';
var clsmhot = 'C:\\Program Files\\Fenrir Inc\\Grani\\plugins\\seahorse\\Google_Translate_for_SH\\close_m_hot.png';
var cls = 'C:\\Program Files\\Fenrir Inc\\Grani\\plugins\\seahorse\\Google_Translate_for_SH\\close.png';
var clshot = 'C:\\Program Files\\Fenrir Inc\\Grani\\plugins\\seahorse\\Google_Translate_for_SH\\close_hot.png';
var trans = 'C:\\Program Files\\Fenrir Inc\\Grani\\plugins\\seahorse\\Google_Translate_for_SH\\translate.png';
var transhot = 'C:\\Program Files\\Fenrir Inc\\Grani\\plugins\\seahorse\\Google_Translate_for_SH\\translate_hot.png';
var hnt = '"C:\\Program Files\\Fenrir Inc\\Grani\\plugins\\seahorse\\Google_Translate_for_SH\\hint.png"';
var rpt = '"C:\\Program Files\\Fenrir Inc\\Grani\\plugins\\seahorse\\Google_Translate_for_SH\\report.png"';

// Grani用設定ここまで

	if(_d.body.innerText.length===0) return;
	var html = _d.getElementsByTagName('html')[0];
	if(html && html.lang==='ja') return;
	
	// Advanced rate check
	var ADVANSE = false;
	// Threshold of translate
	var RATE = 0.1; // ひらがな/カタカナ取得レートの閾値。たとえば0.3なら30%未満で翻訳バーが出現
	
	var result;
	if(ADVANSE)
		result = checkRateA();
	else
		result = checkRateN();
	
	if(result.rate <= RATE) 
		translate(result);
	
	function checkRateN(){
		var ts,te;
		ts = new Date * 1;
		var arr = _d.body.innerText.split('\n');
		var len = arr.length;
		var jp = 0;
		for(var i=0; i<len; i++){
			if( /[ぁ-んァ-ンァ-ン]/.test(arr[i]) )
				jp++;
		};
		te = new Date * 1;
		return { rate: jp / len, time: te - ts };
	};
	function checkRateA(){
		var ts = new Date * 1;
		var text = _d.body.innerText;
		var len = text.length;
		var jp = 0;
		for(var i=0; i<len; i++){
			if( /[ぁ-んァ-ンァ-ン]/.test(text[i]) )
				jp++;
		};
		var te = new Date * 1;
		return { rate: jp / len, time: te - ts };
	};
	function translate(result){
		var isOldMode = ((typeof document.body.style.maxHeight == "undefined") || (document.compatMode != 'CSS1Compat'));

	var css = 'body{margin:0 !important;padding:0 !important;}'
						+'span#toggle1{display:none;width:150px;position:absolute;top:35px;right:10px;text-align:left;'
						+'padding-left:2em;background-color:#fff3e5;border:1px solid #ccc;font-size:10px;}'
						+'span#toggle2{display:none;width:350px;position:absolute;top:35px;left:20px;text-align:left;'
						+'background-color:#ecf4ff;border:1px solid #ccc;font-size:10px;}'
						+'img#cm{cursor:hand;position:absolute !important;top:0px;right:5px;width:16px;height:16px;text-decoration:none;margin:0 !important;}'
						+'img#rate{cursor:hand;position:absolute !important;top:2px ;right:5px;width:40px;height:15px;margin:0 !important;}'
						+'img#hint{cursor:hand;position:absolute !important;top:2px ;left:5px;width:30px;height:19px;margin:0 !important;}'
						+'img#trns{display:none;cursor:hand;position:absolute;top:0px;border:none;left:' 
						+ (_d.body.clientWidth/2 - 35) 
						+ 'px;width:55px;height:20px;margin-top:0px;margin-left:auto;margin-right:auto:margin-bottom:0px;}'
						+'img#cls{display:none;cursor:hand;position:absolute;top:0px;border:none;left:' 
						+ (_d.body.clientWidth/2 + 35) 
						+ 'px;width:55px;height:20px;margin-top:0px;margin-left:auto;margin-right:auto:margin-bottom:0px;}';
		_d.createStyleSheet().cssText = css;

// 翻訳バー用DOM追加
		var head = _d.createElement('div');
			head.id = 'Sleipnir_Google_Translate';
			head.style.cssText = 'position:fixed; width:100%;height:100px !important;top:0px; left:0px;text-align:center;z-index:9999;';
			if(isOldMode) head.style.position = 'absolute';
			_d.body.appendChild(head);

// 1stバーtext
		var text = 'おや、どうやら日本語のページではないようです...でも判定ミスかも! (><;)  ページによってはうまくいかない場合がありますがGoogle翻訳を試みる場合はこのバーをクリック!'; // ココの文言は適当に書きかえてね♪

// HTML
		var htmltext1 = '<img src=' + rpt + ' id="rate" title="クリックでページの解析結果を表示" /><span id="toggle1">' + ['ひらがな/カタカナ出現率 (',	Math.round(result.rate*1000) /10,'%)<br />判定所要時間 : ',result.time,'?秒'].join('') + '</span>';
		var htmltext2 = '<img src=' + hnt + ' id="hint" title="クリックでヒントを表示" /><span id="toggle2">● そのまま翻訳ボタンを押すとページ全体の翻訳を行います。<br>● 単語や文章を選択反転させてから翻訳ボタンを押すとその範囲のみの翻訳になります。<br>● 翻訳後のページから前のページに戻るには、ツールバーの『戻る』ボタンを利用するか<br>  あるいはマウスジェスチャーなどのアクションをご利用ください。</span>';

// inner 1stバー
		var wrapper = _d.createElement('div');
			wrapper.id = 'wpr';
			wrapper.style.cssText = 'width:100%;height:18px;background-color:gray;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=85);';
			head.appendChild(wrapper);

		var bar = _d.createElement('a');
			bar.id ='bar';
			bar.href = '#';
			bar.style.cssText = 'cursor:hand;text-decoration:none;';
			wrapper.appendChild(bar);
			bar.onclick = function (){
										_d.getElementById('wpr').style.display = 'none';
										_d.getElementById('cm').style.display = 'none';
										_d.getElementById('parent').style.display = 'block';
										_d.getElementById('trns').style.display = 'block';
										_d.getElementById('cls').style.display = 'block';
										_d.getElementById('p2').style.display = 'block';
										_d.getElementById('p3').style.display = 'block';
										};

		var p = _d.createElement('p');
			p.id = 'disc';
				var cw = _d.body.clientWidth - 50;
			p.style.cssText = 'cursor:hand;margin:0px auto;width:' + cw + 'px;font-size:12px;color:#fff;text-align:center;';
			p.innerText = text;
			bar.appendChild(p);

		var cm = _d.createElement('img');
			cm.id = 'cm';
			cm.src = clsm;
			cm.onmouseover = function(){cm.src = clsmhot;};
			cm.onmouseout = function(){cm.src = clsm;};
			head.appendChild(cm);
			cm.onclick = close;

// inner 2ndバー
		var parentdiv = _d.createElement('div');
			parentdiv.id = 'parent';
			parentdiv.style.cssText = 'display:none;position:relative;top:0px;margin:0px auto:0;height:20px !important;background-color:gray;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=70);';
			head.appendChild(parentdiv);

		var p2 = _d.createElement('p');
			p2.id = 'p2';
			p2.style.cssText = 'display:none;cursor:hand;';
			p2.innerHTML = htmltext1;
			head.appendChild(p2);
			p2.onclick= toggle1;

		var p3 = _d.createElement('p');
			p3.id = 'p3';
			p3.style.cssText = 'display:none;cursor:hand;';
			p3.innerHTML = htmltext2;
			head.appendChild(p3);
			p3.onclick = toggle2;

// buttons
		var btn1 = _d.createElement('a');
			btn1.href = "#";
			btn1.style.cssText = 'text-decoration:none;';
			head.appendChild(btn1);
			btn1.onclick = click;

		var div1 = _d.createElement('img');
			div1.id = 'trns';
			div1.src = trans;
			div1.onmouseover = function(){div1.src = transhot;};
			div1.onmouseout = function(){div1.src = trans;};
			div1.setAttribute('title','Google翻訳を実行');
			btn1.appendChild(div1);

		var btn2 = _d.createElement('a');
			btn2.href = "#";
			btn2.style.cssText = 'text-decoration:none;';
			head.appendChild(btn2);
			btn2.onclick = close;

		var div2 = _d.createElement('img');
			div2.id = 'cls';
			div2.src = cls;
			div2.onmouseover = function(){div2.src = clshot;};
			div2.onmouseout = function(){div2.src = cls;};
			div2.setAttribute('title','翻訳バーを閉じる');
			btn2.appendChild(div2);
	};

// 翻訳ブックマークレット展開部
	function click(){
		var t = ((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&document.selection.createRange&&document.selection.createRange().text));
		if(t!=''){
			var e = (document.charset||document.characterSet);
			location.href = 'http://translate.google.com/?text='
			+ t
			+ '&hl=ja&langpair=auto|ja&tbb=1&ie='
			+ e;
		}
		else{
			location.href='http://translate.google.com/translate?u='
			+ encodeURIComponent(location.href)
			+ '&hl=ja&langpair=auto|ja&tbb=1&ie=';
		};
	};
	function close(){
		document.getElementById('Sleipnir_Google_Translate').style.display = 'none';
		document.getElementById('parent').style.display = 'none';
	};

// ヒント/リポートボタンのトグル
	var flag1 = true;
	var flag2 = true;
	function toggle1(){
		if (flag1){
			document.getElementById('toggle1').style.display = 'block';
		}
		else{
			document.getElementById('toggle1').style.display = 'none';
		};
	flag1 = !flag1;
	};
	function toggle2(){
		if (flag2){
			document.getElementById('toggle2').style.display = 'block';
		}
		else{
			document.getElementById('toggle2').style.display = 'none';
		};
	flag2 = !flag2;
	};
})(document);


本当はパスの指定にSleipnirScriptでsleipnir.ScriptFullName()*2を利用しようかと考えたのですがそうなるとスクリプト本体も手直ししなくちゃいけないしGraniユーザーにもわかりやすいかなとあえてフルパスで。

設置

上記のスクリプトをコピペして環境に合わせて編集してもいいのですが、結局画像を別に用意することになってしまったのでとりあえずインストーラーでブラウザを標準的にインストールしてあると仮定したファイルを4種用意しました。
普通のPCであればまだほとんどが32bit版のWindowsでしょうけれど、ワタシみたいにメインを64bit版Windowsにしているヒトのことも考えてのことです。
ファイルはここ↓からどうぞ。
Google_Translate_for_SheahosePack.zip

4種類をひとつのパッケージにしてzip圧縮してあります。*3
内容は以下のようになっています。

Google_Translate_for_SheahosePack

展開したフォルダのうち、自分の使用OSとブラウザにあうフォルダの中にあるpluginsフォルダをコピーしてブラウザのインストールフォルダにある同名のフォルダへ上書き保存します。
ブラウザのインストールパスが標準ではない場合、つまり C:\program files あるいは C:\program files (x86) 以降でない場合はスクリプトファイルを編集してパスを書きかえてやる必要があります。
また、ブラウザ本体の上位ディレクトリ名も Fenrir & Co の場合と Fenrir Inc の2種類存在する場合もあるようなので、設置後に動かなかった場合はその辺をチェックしてみて、もしも違っていたならスクリプトのパス指定部分を編集して書きかえてください。


翻訳スクリプトの大元はGoogle翻訳ブックマークレットなので、ページ翻訳や選択翻訳などもできてとっても便利です。
設置もなるべく容易になるようにしてみましたが、もし上手く動作しないようでしたらコメントください。できる範囲でサポートさせていただきます。

*1:当初はIE8がインストールされている環境向けに作っていたので画像をdataスキームつかって読み込ませるべくbase64エンコードした文字列をスクリプトファイル内に記していました。ただ、いろんな環境対応を考えたときマズイなとおもったのであえて画像を別ファイルにしたという経緯があります。

*2:Graniだとgrani.ScriptFullName()になる。

*3:個人的には7zipが好みなのですが、展開ツールを持っていない方のためにWindowsXP以降なら標準機能で展開出来るzipにしました。

ページ翻訳:Google Chrome風のアレを作ってみた

Google Chrome使っていて日本語のページじゃないところにアクセスするとビューの上部にこのページ翻訳しますか? みたいな大きなお世話のバーが出現しますよね。
いや、確かに便利なんですけどSleipnirであればブックマークレットやそのアクション化で同様なことができるわけです。
でも、Chromeみたいなインターフェースを好む方も中にはいらっしゃるようで・・・


先日TwitterのTLを見ていたらフォローしている方がFUCの投稿に関連したつぶやきをされていました。
リンクが貼られていたので確認したところ、Chromeのお節介機能をSleipnirにも実装して欲しい、みたいな書き込み。
実際Chromeをセカンドブラウザとして利用している自分としてはあの機能は(`皿´)ウゼーだけなんですけどそれをヨシとする方も存在するんだなーと。
でもまぁ少し考えてみてアレとコレの組合せでなら自分でも似たようなモノが実装できそうかも知れないなーとか思い出したのが運のツキ。
てなわけで苦手な正規表現を一から勉強するハメになりつつも、なんとかそれっぽいモノができましたので公開してみます♪

  • 本文に日本語が存在しないサイトを訪れるとビューの上部にGoogle_Translate Dockが出現します


ただし、本家Chromeみたいにここは翻訳するに及ばず、みたいなサイトを自動で登録するのはワタシのスキルが追いついていないので今回は見送らせていただきました。
どうしても動作させたくないサイトがあるならばチョット手間ではありますが各々Seahorseスクリプトのヘッダに// @excludeを追加していただければと・・・


それとSeahorseスクリプトだけで完結できるかもとは思いましたが、いわずもがなスキルが及ばずましてやDOM操作は不得手なので今回はIEDockExとSeahorseスクリプト、そしてブックマークレットをアクション化したファイルの組合せでそれっぽくすることを目指しました。
まぁ普通に利用するぶんには問題ないかなーと♪


流れとしてはSeahorseスクリプトで訪れたページのbodyタグ内に日本語(ひらがな/カタカナ-ハンカク含む)が存在するかどうかを判定して、本文内に日本語が見つからなければアクション化したブックマークレットを呼び出すといった感じです。Google翻訳は対象の言語を自動判定してくれますので日本語以外で対応している言語であればコレだけでOK!
最初作り始めた頃はタイトルタグの中身で判定させてみたんですが、現実には日本語サイトであってもタイトルが日本語とは限らないということもあってbodyを探るスタイルに変更。
ただし仕様上、サイト内スクリプトによる描画で表示される文字には対応しきれません。なのでページに日本語が見えているのにお節介バーが出現するという場合もありえますのであしからず。
正規表現によるbody全体の検索はタイトル判定に比べるとIEDockExを呼び出すまでのタイムラグが気になったんですが、実際試してみたらおもったほど遅くもなかったのでコレでいいのかなぁと。
それと当初は漢字も判定の対象にしていましたが、当然のことですけど中国語のサイトではマズかったのであえてひらがな/カタカナおよびそれの半角へと簡素化しちゃいました。


なにぶん、一夜漬で慣れない正規表現を仕込んだので晒すのがマジで(/ω\)ハズカシーんですけど、多分もっとスマートなやり方があるハズ・・・

// ==UserScript==
// @name Google_Translate
// @description 日本語じゃないページを見つけるとGoogle_Translate(IEDockEx)アクションを実行
// @include http*
// @exclude http://google.*/*
// @exclude http://seesmic.com/*
// @type SleipnirScript
// ==/UserScript==
if (document.title !== 'Google 翻訳'){

// bodyの全内容を取得
var node = document.body.innerHTML;

// nodeからHTMLタグ、改行、タブ文字、半角/全角スペースを除去
var rep = node.replace(/<.*?>|[\n\r\t]| | /g,'');

// 日本語が存在しなければアクション実行。ただし中国語のときに具合がわるいので漢字判定はしていない
if (!rep.match(/[ぁ-ん ァ-ン ァ-ン]+/g)) {
ShowToggle();
}

// 翻訳ページに遷移したらGoogle_Translate Dockをしまう
if (location.href == '/^http:\/\/translate\.google\.com\/.+/'){
ShowToggle();
}


// Google_Translate Dockの表示/非表示
function ShowToggle(){
sleipnir.API.ExecuteAction('ShowGoogle_Translate')
}
}

Graniで利用する場合はIEDockExを自分で設置して、上記のスクリプトの最終行付近にある

sleipnir.API.ExecuteAction('ShowGoogle_Translate')

の部分を

grani.API.ExecuteAction('ShowGoogle_Translate')

のように書きかえます。
それとGraniにはplefsフォルダにplugins.iniが無い場合がありますのでその際は新たに作成してやる必要があります。
Graniでplefsフォルダ内にplugins.iniが存在しない場合、Sleipnirの公式スキンページ(Grani用ではない)からいずれかのスキンをインストールすることで自動生成されます。

  • Google_Translate Dock(IEDockEx)のindex.html
<!-- saved from url=(0014)about:internet -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>Google_Translate</title>
<style type="text/css">
body {
	background-color:lightgreen;
}
div#outer {
	margin-top:-20px;
	width:100%;
	text-align:center;
}
div#inner {
	margin:0px auto;
	width:200px;
}
a.tt {
	width:48px;
	height:20px;
	background:transparent url("images/Translate.png") top left no-repeat;
}
a.tt:hover {
	background:transparent url("images/Translate.png") center  bottom no-repeat;
}
a.ce {
	width:48px;
	height:20px;
	background:transparent url("images/Close.png") top left no-repeat;
}
a.ce:hover {
	background:transparent url("images/Close.png") center bottom no-repeat;
}
span {
	font-size:10px;
	color:darkgreen;
}
</style>
</head>
<body>
	<div id="outer"><span>おや、どうやら日本語のページではないようです... ページによってはうまくいかない場合がありますがGoogle翻訳を試みますか? </span>
		<div id="inner">
		<a class="tt" href="action:Google_Translate"></a>
		&nbsp;&nbsp;
		<a class="ce" href="action:ShowGoogle_Translate"></a>
		</div>
	</div>
</body>
</html>
  • Google_Translate Dock(IEDockEx)のconfig.ini
[Settings]
Action=true
ContextMenu=false
ScrollBar=false
Align=top
Size=40
  • Google_Translate.js(アクション用)
URL = "javascript:(" + function(){var t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&document.selection.createRange&&document.selection.createRange().text));var e=(document.charset||document.characterSet);if(t!=''){location.href='http://translate.google.com/?text='+t+'&hl=ja&langpair=auto|ja&tbb=1&ie='+e;}else{location.href='http://translate.google.com/translate?u='+encodeURIComponent(location.href)+'&hl=ja&langpair=auto|ja&tbb=1&ie='+e;};} + ")()";


今更ですけどIEDockExプラグインとSeahorseおよびUser Action Extensionは必須です。今回のネタを試したい方はあらかじめこれらのプラグインをインストールしておいてください。*1
それとSleipnirオプション>全般にある”スクリプトによるクライアントの操作を許可する”を有効にしておく必要があります。


と、いうことで現段階でのファイルを用意しておきますね。

7zip圧縮してありますので適当なツールで展開後にSleipnirインストールフォルダのpluginsフォルダへ上書きするだけです。
ファイルを設置したら、plefsフォルダにあるplugins.iniの[Dock]セクションへGoogle_Translate.fxファイルを登録する必要があります。
また、設置後にSleipnirを立ち上げたとき標準状態でメニュー>表示>Dock>Google_Translateのチェックを外しておくことをお忘れ無く。

[Dock]
Dock1=ExplorerBarTabDock.fx
Dock2=ExplorerBarDock.fx
Dock3=TabDock.fx
Dock4=SearchDock.fx
Dock5=OutputDock.fx
Dock6=SagittariusDock.fx
Dock7=InformationDock.fx
Dock8=Google_Translate.fx  ←こんな感じで[Dock]セクション末尾に連番で追加してやります


Sleipnirを立ち上げたあと適当に日本語以外のページ(Google翻訳が利用可能な言語に限る)へアクセスすると、ビューの上部へ翻訳するかい? みたいなメッセージが出現します。*2
翻訳ボタンを押すとWebページがGoogle翻訳ページへと遷移してGoogle_Translate Dockが自動的に消えます。仕様変更で消えなくなっちゃいました・・・(´・ω・`)
翻訳を選ばずに閉じるボタンを押すとページはそのままでGoogle_Translate Dockだけが消えます。


まぁいろいろとダメ出しされそうですがとりあえず動作するからいいかな、みたいな。

追記

さっそくTwitterでダメ出しされました(笑)

  • Google_Translate Dockが表示されている状態で他のタブに移っても表示されたままになる。
    • 当然です。他のタブに移ってもそれを検知して閉じる機能は未実装ですので現段階では仕様です。
      ていうか必要ないのであればその時点でDockを閉じてください。
  • ScriptBlockプラグインを入れているとボタンが反応しない。
    • あたりまえです。
  • 翻訳したページを再読み込みすると、Google_Translateされているページを翻訳状態でGoogle_Translateスクリプトが再度起動してしまう。
    • 現時点では仕様です。http://translate.google.comを除外設定するのはスクリプトの性格上無理っぽいので。ていうかそんな無駄なことをしないでください(笑)
      翻訳後のページを再読み込みすることになにか意味があるのですか?
追記2

上記3番目については対策を行い、本文編集並びにファイルの差し替えを行いました。
あわせてGrani用ファイルも用意しましたので、IEDockExプラグインを設置後にご利用ください♪

*1:ちなみにGraniでも利用可能ですよ♪

*2:あえて海外ベンダーが使いそうな言い回しにしてみたりとか(笑)気に入らなければindex.htmlを書きかえてくださいね。

改良版ブラウズなうスクリプト

先日紹介したTwitter純正ブラウズなうスクリプトですが、その後いろいろとダメな部分に手を加えられていきましてとってもいい感じになりましたのであらためて公開させていただきます。

Super Drag Extension必須です。
また、スクリプトファイルはShift-JISにて保存してください。*1

// ShareThisOnTwitterSuperView

//全角英数字を半角に
var doc = document.title.replace(/[A-Za-z0-9]/g, function(s) {
    return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
});
//半角カッコを全角に(変換異常対応)
doc = doc.replace(/[(-)]/g, function(s) {
    return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
});
//118文字以上はカット
if (doc.length > 118) {
    doc = doc.slice(0,115) + '...';
}
//引用符で囲む
doc = ['“',doc,'”'].join('');

sleipnir.API.ExecuteAction('SuperDragShowSuperView("http://twitter.com/share?text=' + encodeURIComponent(doc) + '&url=' + encodeURIComponent(location.href) + '",17,9999,40,550,320)');

ワタシは正規表現というヤツがどうにも苦手でして・・・(汗
とってもいい感じに改良してくださった@aireinaさん、@10th543さん、ありがとうございました♪


ネットで拾ったフリーアイコン画像を使ってアクション用画像を作り直しました。
よかったらどうぞ→*2   

*1:文字コードの関係でUTF-8だとうまく動作しないようです。

*2:アクション名.pngへ名前を変更してdefaultスキンのactionsフォルダへ移動すればSagittarius Dockなどで利用出来ます。

Sleipnir Start 1.2 リリース

Fenrirが提供するWebのポータルサイト、Sleipnir Start が新たなスキン二つと設定の保存機能などが実装されてリリースされました。

【Sleipnir Start】 新デザイン、トレンド&アイコン追加、OpenID にも対応しました (フェンリル | デベロッパーズブログ)

新デザインでのお気に入りはフェンリルホワイト。

  • ワタシのSleipnir上でのSleipnir Start
    画像ではスクリプトによるオマケがありますけど実際はもっとシンプルです。

当然ワタシもブラウザ立ち上げたときに表示されるスタートページはSleipnir Start
Sleipnirはもとより2ndブラウザであるChromeFirefox、その他インスコしてあるブラウザのすべてに設定してあります♪(UbuntuやMac OSXも同様)
YahooとかgooとかMSNとかが提供するスタートページは余計な情報が多すぎてどうにも好きになれないし、かといってGoogleさんだと淋しすぎるし・・・(笑)
ニュースやトレンドを知りたければ右上のB!リーダーボタンをポチッとな。
はてブホッテントリやニュースなどの見出しが一目でチェック出来るしインラインフレーム表示機能を使いその場で詳細を展開して確認することもできます。
もう、コレを使い出すと他のポータルサイトなんて使えませんマジで!


Sleipnir/Graniユーザーでなくてもすべての機能が利用できるクロスブラウザ対応なので、他のブラウザをメインにしている方にもオススメですよ♪