読者です 読者をやめる 読者になる 読者になる

Developer's Blogで

追記 2007年12月17日17時51分

適宜追記はしているつもりですが、このエントリはコメント欄も併せてお読み下さい。


SeaHorse (1) – みなさんのお勧めは? - (フェンリル | デベロッパーズブログ)

に掲載されているスクリプト

 while (_window.busy) {

  sleipnir.Sleep(10);

 }

って記述必要なのかな?

僕の認識だとSeaHorseはページ読み込み完了後に実行されるはず。
上の記述って「ページ読み込み完了まで待つ」って意味あいですよね?


追記 2007年12月17日17時51分
引用元で修正されました。



あとSleep() メソッドっていつの間に使えるようになっただろう。
WSHスクリプトの頃は使えてたけどSelipnirScriptになってからは
全体がフリーズするようになったと思うんだけど。


サンプルに使われてるスクリプトってわざわざ
// @type SleipnirScript
付けずに 普通のJavaScriptでいい気もする。

気になったのでためしてみた。

while.... の部分

あってもなくても問題なく動いた。

// @type SleipnirScript

こちらも // @type SleipnirScriptの記述を削除して、_document → document と訂正すればOK。
ただし、当然ながらSleipnirScriptを使っている部分は削除しないと動きませんので
面倒だからwhile・・・ の部分丸ごとカットする必要があります。

Sleepメソッド

全体がフリーズする時っていうのは

var pnir = new ActiveXObject("Sleipnir.API");
var id = pnir.GetDocumentID(pnir.ActibeIndex);
var document = pnir.GetDocumentObject(id);
while(pnir.IsBusy(id)){
    sleipnir.sleep(10);
}

みたいな書き方をしてた時だったような気がする。
while文の条件部分が今回のと違う。
それで気づいたんだけど

 while (_window.busy) {

_window.busyってなんだ? 見たことない。IHTMLWindwo2のなんかなんだろうなぁ。調べたけど見つけられなかった orz
たぶんこれを使えばSleipnir本体を固まらせずに読み込み待ちとかできるんだろう。


追記 2007年12月17日17時51分
busy自体はundefinedなため sleipnir.sleep(10); 実行されていない模様。

だけど、最近このSleepの有効なシーンにでくわさなくなったなぁ。スクリプトを書いてないだけですけど。

なんかおかしいことにきづいた。

Developer's Blogにあるスクリプトでは

_document.title = '<謎>' + _document.title + '<ですよ>';

タイトルを書き換えるように書かれているのに
僕の環境 IE7では書き換えられていなかった。
IE6の環境で見てみると書き換えられている。

検証したスクリプト

// ==UserScript==
// @name NazoSample01
// @description SeaHorse Sample 01
// @include http://www.fenrir.co.jp/blog/
// @type SleipnirScript
// ==/UserScript==

 if (document != null) {
 	var hoge= '<謎>' + document.title + '<ですよ>';
	alert(hoge);
	document.title = hoge;
 	for ( var i = 0; i < document.styleSheets.length; i++ )
 	document.styleSheets[i].disabled = true;
 } 

何でだろ?


追記 2007年12月17日17時51分
僕の設定のせいでした。
Sleipnirのメニュー>表示>タイトルの変更を禁止
この項目にチェックが入っていたため動作していませんでした。


ついでに上記スクリプトではSleipnirScriptとtype宣言してるのに
documentがエラーを出さずに使えるのだろう?


追記 2007年12月17日17時51分
グローバル変数として _window が宣言されていて
documentはその _window のプロパティだからだそうです。

謎が多い。謎の人が書いたスクリプトだからか?

まとめ

謎の人は謎だらけ。


追記 2007年12月17日17時51分
名前だけです(笑)