fub redカスタムパネル用のブツに4つ追加しました。
ウェブページ最大の弱点の一つは、「メモを残せない」ことだと思っている。多分無理だけど最終的には、簡単に書き込んだり文字を削除したりでき、それを簡単にローカルに保存できるようになりたい。
document.body.contentEditable = true;
CONTENTEDITABLE Attribute | contentEditable Property (defaults, A, ACRONYM, ...) (英語)より
これは、ウェブページを編集可能にする方法。WYSIWYGとまではいかないものの、文字に関する最低限の編集なら間に合う。
applyElement()というメソッドがある。まだ確認していないが、これを使って選択文字列をEM要素やSTRONG要素にできれば尚良い筈。
幸いなことに、innerHTMLプロパティは現在表示しているHTMLのソース(という言い方は語弊があるが)を格納しているらしいので、document.documentElement.innerHTMLをコピーすれば、保存もそう苦にはならない。
0.x秒間隔で、4回発射するのを書いて見たのです。ついでにズーム機能も手直しして付けてみました。
ウチの環境では0.1秒間隔が限度でした。場合によってはエラーが。やはり少し強引過ぎるようです。
なんかカチカチ鳴るのが情けなさ過ぎ。そういえばどこかにビームライフルの音が落ちていたっけ。あれを、コンパネのサウンドの、「ナビゲーションの開始」に割り当ててみるとかどうだろう。
すぐに見つかった。
駄目だ落ち着かない。そうじゃないんだ。パネル内に限定したいんだ……
落ち着かないといいつつ、小気味いいのでしばらくこのままに。
IE独自拡張のpopupというオブジェクトの不具合について。
margin、padding、borderは、styleプロパティの書き換え以外の方法では指定できない。
これは良くて:
var oPop = window.createPopup();
oPop.document.body.style.margin = '3%';
これは駄目:
var sS = oPop.document.createStyleSheet();
sS.addRule('body', 'margin : 3%');
この方法で、外部CSSを使っても駄目:
oPop.document.createStyleSheet(url);
background-color と colorプロパティ以外は無視されるような感じ。
トラバーサルが発生しない。
onclick属性を持たせた要素の隣にチェックボックスを配置、チェックを入れると、ダイアログ表示待ちでブルースクリーンに。
凝った用途には全然使えない。時間損した。
使っていなかったファイラーをアンインストールしたら、IEのコンテクストメニューの出が2秒速くなった。今まで出が遅すぎて全然使っていなかったが、少し活用を考えてみる。
肝心の「コンテクスト」の判断をどうやってやるのかが疑問だったが、ここが参考になった。
そういうわけで、IEの右クリックに、「要素のプロパティ」という項目を追加する計画を発動。で、メモ。
得られる情報を全て網羅するくらいの勢いで。
良い「顔文字否定論」を見つけた。嫌味でなく。
メラビアンの法則というのによると、人と対面で会話しているときに相手に伝わる内容を100%とすると、言葉はなんとたったの7%、声の調子が38%、一番大きいのは身振り手振りや表情・雰囲気などで55%、だそうです。そのまま使ったら7%にしかならない文字の表現を、どうやって会話の調子を壊さず、しかも文字列だけ使って、わずかでも豊かにしようかという努力なわけで。(は)は、これは邪道でもなんでもないって思います。
会話は、相手との関係を築くのが目的だ。ある瞬間、特定の相手がいるとき、会話は成立する。しかし、時間を超え、特定の相手が存在しないのに会話をしようとするのは気違い。
つまり、正にその瞬間、誰か特定の人との関係を築こうとしている人が多いのだろう。そういう場合に、顔文字は有用であると思われる。チャットや掲示板、相互言及型のウェブ日記には向いている。
しかし、内容を伝えたい、あるいは残したい、と考える時、顔文字が紛れ込んでいると、そのメラビアンの法則
を文章にも当てはめるとするならば、言葉はたったの7%しか伝わらないということになってしまう。それでは困る。
この「法則」の話は、優れて参考になった。顔文字は無論、奇妙な雰囲気を作り上げ文書に紛れ込ませることの愚を、思い知らされた。つまり「雰囲気」は非常に伝わりやすいということ。実体験から私もそう思う。しかし私が伝えたいのは「雰囲気」ではない。そういうものに大切な「内容」が奪われてしまってはかなわない。
雰囲気は伝わりやすいのだから、ここぞという時に、内容に密接に結び付いた形で利用するのが良いのだろう。顔文字は、内容と直結することは無いから、やはり私はコンテンツで顔文字は使わないだろう。
「内容に密接に結び付いた雰囲気」を作るには何を用いるか。
言葉以外無いではないか。
「日本人は周囲を見回して同じように振舞うのを好む」、などと良く言われますが、実際、周囲を注意深く見回している人がいますか。
私は思う。欧米では、周りが皆積極的だから、自分も安心して積極的でいられるのだと。皆、意見をはっきり言うものだから、自分も安心して意見をはっきりと言うのだ。欧米人だって、周りと同じように振舞っているだけだ。
ある特定の習慣の是非の問題を、真似るだの真似ないだのという問題に摩り替えてしまってはいけない。真似を否定することは、文化を否定することと同義である。
私も「偽ス切リボ」チックなスクリプト書いてみたんですが、
promptでスタイルの一覧を表示して番号を入力させる感じで作ったら、
W3Cのページだと多すぎて表示しきれませんでした。
そういうのをjavascriptスキームでやろうとしたのですが、どうやらバイト数制限があるらしく、長いのを書いたら途中でちょん切られてしまいました。雛型を作って使い回せれば良いのですが。
で、考えましたが、javascriptスキームのスクリプトを幾つかに分けて、setTimeout()を使って連続で発射する方法しか思いつきませんでした。最初にポップアップオブジェクト等の雛型となる関数を発射して、続けざま生成、実行用のスクリプトを発射です。そんなわけで(?)、私はカスタムパネルのことを「木馬」と呼んでいます。自作の奴は白いし。
今その方法で色々試していますが、JScriptではpopup Object (英語)辺りが一番楽そうな雰囲気。
直URLでパネルに入れちゃう人が続出しそうで、紹介しづらいんですが
どうしたものかな。
むしろカスタムパネル用HTML等は、公開して共有できるところに魅力を感じていたりしますが。良い例では、ウェブ日記用の更新チェッカ等があります。Mozillaのサイドバーなどで利用されることを前提として、公開している方もいます。
生成したら、即挿入ですね。type=hiddenなINPUT要素は怪しい、と。
今後もバグ等でご迷惑があれば、お叱り頂ければ。
JavaScript for CSS (10)のdocument.implementation情報より、MacIE5はDOM1 HTML対応を謳っている優等生だと思っていたのですが、そのような罠が。WinIEも、type=hiddenなINPUT要素の生成はかなり怪しいものがありました。with文を使うと属性が設定できなかったり。
以下DOMオタ話なので、長い上につまらないかもしれません。
innerHTMLはダサいですか。私も過去ログでダサいと書いていた気がします。しかしイベントで関数を呼び出す際、DOM(addEventLisener)でやろうとするとIEが立たず、onclickに代入するとMozillaが立たずで、負けました。
ただ、ちと無関係ですが、さらにダサいであろうinnerTextは、かなり便利であると言わざるを得ません。
<h2>H2の内容<span>日付など</span></h2>
マークアップの妥当性はともかくとして、これのTextNodeだけを連結させて抜き出す、という用途を考えてみると、どうしてもinnerTextを使いたくなってしまいます。でもこの際だから正規のDOMだけでなんとかしてみようかと。
function getInnerText(element){
var children = element.childNodes;
var texts = new Array();
var j = 0;
for(var child, i=0; i<children.length; i++){
child = children.item(i);
if(child.nodeType == 1){
texts[j] = getInnerText(child);
j++;
continue;
} else if(child.nodeType == 3){
texts[j] = child.nodeValue;
j++;
}
}
return texts.join();
}
私の持っている知識で考えたら、こんな冗長になっちまいましたよ、師匠。ただ、変なゴミがくっついてしまうので、多分まだ何か足りないor間違っているのでしょう。なんかもう頭がこんがらがってしまって駄目です。
←こちらはマシンスペックに自身のある方だけどうぞ。alertダイアログはEnterキーでクリアします。ウチ(Win98 AMD-K6 550MHz 192MB)のMozillaでは5秒程かかりました。
二年ぶりに改訂してみました。動作未確認。
function getInnerText(element){
var children = element.childNodes,
texts = new Array();
for (var child, type, txt, i=0; i<children.length; i++){
child = children.item(i),
type = child.nodeType;
switch(type){
case 1: // Element Node
texts.push(getInnerText(child)); break;
case 3: // Text Node
txt = texts.push(child.data); break;
default: break;
}
}
return texts.join('');
}
で、題名が2つあるのは、そちらのミスでしょうか?
ミスでした。どうも有り難うございます。このごろ、Perlが起動した瞬間に落っこちてしまうので、全部手作業でコピーペーストです。AHLも積極的に使えないのでドキドキ。
同人系サイトってやたらフレーム好きだし、それはいいとして外部へのリンク時にフレーム破棄しないブザマなパゲが多いし、そゆとこからリンクされる事多いし。
日記読み日記 (1) - フレーム強制排除(ねこめしにっき) より
外部へのリンク時にフレームを破棄しないブザマなパゲ
は、ただ笑ってやるのが良いのではないかと。
ブザマになるのはやっちまった本人さんであって、CSSにて柔軟なレイアウトを実現している我々のウェブページは、ある程度の劣悪な環境で表示されようと、ちっとも見劣りしないのですから。
それに、同人界といえば無断リンク禁止発祥の地(偏見?)。フレーム内に表示するなど以ての外という風潮があるのではないでしょうか。憶測ですけれども。もしそうなら、説得も楽であると推測します。
弊害もあります。例えばLycosのPreviewを使って複数のウェブページをインラインフレーム内に読み込んでいて、あるウェブページによって突然フレームを解除された場合、それまでのダウンロードが全てパーになるのです。
ですから、もし、フレーム内に表示させられるのを防ぐスクリプトを書くのであれば、例えばこんな風にするのがより良いのではないかと。
location.hrefプロパティの書き換えではなく、window.open()メソッドを使う。body{ display : none }等のCSSルールを追加(意地悪な例)。
body{ displey : none }なんて、滅多に使う機会ありませんよ、師匠。
fub redのカスタムパネルは、ウェブサイトの目次を入れて使うのも良いね。そうすると、幅指定したフロートで作成された目次は、やや汎用性に欠けるといわざるを得ない。@media sidebarなんてのがあればなあ。
トップページはおおまかな目次にしてなるべくスクロールを抑え、別途、詳細な目次を作成。それ以上ないくらいシンプルなスタイルで表示。そいつを、サイトマップとして再利用する。
「どこからやって来たか」の問題を緩和する方法がある。a:visitedの内容を複製して、本体への始点アンカーにする。a:visitedの配列をどうやって得るかが問題。ひょっとして無理?
言葉尻を濁しただけあって、やはり考えが浅かったなぁ。
……かも知れない、……ではなかろうか、……のような。こういうのを一種の「信号」と見なすのは良いアイデア。断定できるところまで突き詰めて考えるのは、安易に濁すより有益に違いありません。
肝に銘じることに。
早速こしらえてみました。
fub redのカスタムパネルに入れて使います。しばらくポイントしていると、説明がポップアップします。って、ただのtitle属性ですが。
思うに、カスタムパネルにフォーム部品入れてもあんまり面白くないです。パネル内のwindowオブジェクトと、タブ内のそれを同時に取得することが出来ないようなので。
href属性に記述するjavascript:スキーム内では、気をつけるべきことがあります。
作ること自体が、すげーたのしー
です。fub redは私にとって最高のブラウザ。作者さんありがとう。
シャア専用fubが、カスタムパネルに対応。任意のHTML文書(自作可)をMozillaサイドバーのように使えるとのことです。それだけじゃあなく。
スクリプトを書く時の要領としてはタブロックの仕組みを巧く利用して
- onClickに書いた場合はバー内のスクリプトとして実行される。
- hrefに書いた場合や、locatnio.hrefを書き換えた場合は、アクティブタブ上で実行されます。たぶん。
とのこと。つまり「カスタムパネル」から実行されたJavaScript(javascript:スキーム使用)が、タブ上のページに対して機能するというのです。
極めて興味深いので、しばらくfub redカスタムパネル用のHTMLファイル制作に興じたいと思います。
しばらく更新しないので、User-Javascript(軽量版)でやるべきでない機能を適当にcutしたものをputしておきました(ajs20020220.lzh)。
最後のものは、例えばShift+ホイールクリックでインラインフレーム内に展開したページにはスクリプト殺し用のフィルターを適用する、等の為の設定です。フレーム内表示を解除するスクリプトを仕込んでいるサイトが存在しますので。
.urlファイルでjavascript:スキームを使うアレは、リンクフォルダの直下に置かなければwindowオブジェクトを取得できないようで。そういうわけで整理するのは難しそう。でもめげずに移植できるものは移植します。User-Javascriptが少しでも軽くなるなら。
下は文書タイトルをHTMLのa要素にしてクリップボードにコピー。
[InternetShortcut]
URL=javascript:
function AJS_titleToHyperLink(){
var d=document;
var txt='<a href="'+ d.URL +'">'+ d.title +'</a>';
var t=d.createElement('TEXTAREA');
t.appendChild(d.createTextNode(txt));
var rng = t.createTextRange();
rng.execCommand('Copy');
alert('copy : ' + txt);
}AJS_titleToHyperLink();
次のものは、画像を全部消したいときは「img」、BR要素を消したいなら「br」等と入力して任意の要素を除去するというお遊び。
[InternetShortcut]
URL=javascript:
function AJS_remove(){
var d=document;
var p=prompt('Element name you wanna \"remove\".', 'br');
if(p == null || p == '') return;
var els = d.getElementsByTagName(p);
while(els.length > 0){
var el = els.item(0);
el.parentNode.removeChild(el);}}AJS_remove();
やはり改行を取らないと動きません。改行を取る際は末尾行から行うのがコツ。先頭行から行うと、折り返しとの区別がつかなくなって理不尽なエラーに悩まされることになります(自戒)。ml-ent.exeにカスタマイズ性があればなあ。
自作する際は、コンテクストメニューの【編集】コマンドからテキストエディタに渡すようにしておくと何かと便利です。
- お気に入りメニュー及びリンクバー上の.urlファイルの内容がスクリプトだった場合は、
新規タブの設定に関わらず、新しく開かないようにした。
fub 0.0.196c & fub_red 0.3.24 - 不具合等どうぞ より
有り難や有り難や……
何かもっと簡単な方法があるに違いないぞ。
関係ないが、広告を消す「道具」を簡単に利用するのは好きじゃない。広告とは自分が戦うべきだ。その武器を、Proxomitron(本体)は提供してくれている。提供してくれているにもかかわらず、私はフィルターで広告を消さない。文章に集中できない時に限り、Alt+ホイールクリックで自発的に消す。ストレス発散の良い方法なのである。
用意なさっていたというアイデアとはどんなものだったのか興味あり。
一言で言えば、罵倒強制ルールです。文章末の「#」の後に必ず罵倒の文句を書かなければなりません。テーマに無関係な部分への突っ込みもココ。そのかわり本文に含んではいけません。
罵倒「しなければならない」ので、それが本気であるかどうかは疑わしい、という雰囲気ができあがれば好し。所謂「お約束」です。
もちろん、参加者全員に共通のはっきりした目的があれば、こんな馬鹿げたことをする必要はさらさらありません。しかしそうでない場合、真面目に議論しようという態度を繕っている人間や、最初から喧嘩腰の人間、馴れ合いに来た人間など色々いて、多くの場合議題はネタに過ぎません。自己満足さえできればそれで好、なのです。ほとんど何も生産されないのです。だからこそ、内容は分離しなければなりません。その一例というわけです。
実際には、改行を全部取っ払います。
[InternetShortcut]
URL=javascript:
function disableCSS(){
var styles=document.styleSheets;
for(var i=0; i<styles.length; i++){
styles.item(i).disabled=true;
}
}
disableCSS();
これを、(2行目以降の改行を取り除き)、拡張子を*.urlにしてお気に入りフォルダに入れます。リンクフォルダに入れるとボタンのように使えます。関数名を思いっきり長くすれば、制作者のものとバッティングすることもないでしょう。
スタイルシートをオフにするなんて他愛のないことだけでなく、HTMLのオブジェクトモデルを利用すれば他にも様々なことが可能でしょう。Mozillaのサイトナビゲーションバーっ「ぽく」することも可能かも。
[InternetShortcut]
URL=javascript:
function zoomZoomZOOM(){
var d=document;
var czoom = d.body.currentStyle.zoom;
var value = '';
if(czoom == 'normal') value = '110';
else value = eval( czoom.substr(0, czoom.length-1) ) + 10;
d.body.style.zoom = value + '%';
}
zoomZoomZOOM();
やはり実際には改行を取って下さい。これは、スタイルシートでフォントサイズを固定されていても、強制的にズームします。画像、スクロールバーも一緒に。まあスクロールが重くなってしまって使い物になりませんが、一例です。しかも即興ものなので一応確認を取ったという程度です。
HTMLに埋め込むまでもない処理は関数の呼び出しも含めてコレでやることにした。全部書き直し。ProxomitronのURLコマンドとの連携もしたいし。もっと早く気づいていればなあ。
Opera6.01正式版を導入。
Changelog for Opera 6.0 for Windows (英語)
改めて使ってみてやはり良いのがブックマーク検索機能。この機能もIEで擬似的に再現してみる「努力」をしてみた。IEというかWindowsというか。
これで、Ctrl+Alt+F等でFavoritesフォルダが開くので、F3で検索をかけられる。動作がのろいけれど検索機能としてはまあまあ。また、IEのお気に入り編集機能は酷く使いづらいので、Explorerを使ったほうが良いというのもある。
カテゴリ分類は大の苦手。どのジャンルにも当てはまらないものがあると、面倒臭くてかなわない。そういう場合は分類しないことに決めた。Favoritesフォルダ直下に置く。その代わりキーワードとなる名前をたくさん考えてやる、と。そして検索。こうすれば、複数のカテゴリにまたがるものでも適切に探し出すことが出来るはず。本当に頻繁に訪問するウェブページだけ、フォルダ分けしておけばいいのだ。
この場合「Favorites」はどう使うか。
そもそも、気に入ったわけでもないのに「Favorites(お気に入り)」に入れるというのも妙な話だ。この点についてはかなり以前からムズムズしていた。では、「気に入る」タイプのリソースとは何か。それはバイナリの類だろう。画像やら音源やら圧縮ファイルといったタイプのショートカットをこそ、「Favorites」に入れるべきだ。ちょっといいなと思った程度の画像は、面倒で保存しなかったが、保存するまでもないものは、URLショートカットを保存しておけば良いだけだ。デッドリンク多発が予想されるものの、それじゃ困るものは保存すれば良いわけで。
CSSで背景として使われている画像がちょっと問題。
なんとかして楽にURLを取得できないだろうか。……ってUser-Javascriptの話題ですこれ。で、どうやらevent.srcElement.currentStyle.backgroundImage.split('"')[1]で取得可能らしいので試しに実装。
MSのCSS独自拡張だが、これを利用すればOperaのズーム機能に似たことが出来る。画像から何から全て大きさが変る。font-sizeプロパティの絶対値指定も無関係で、豆画像の豆文字も無理やり拡大して読むことが可能に。
ただ、完全に再描画するためか縦長のページだとかなり負担が掛かるので、ポイントしている要素のzoomを変更するようにしてみた。適当なスペースでイベントを起せば、body要素もzoomできるし。
割り当ては、任意の文書内要素にポイントしつつ、「右クリック」+「ホイール回転」。
ステータスバーに現在ポイントしている要素名を表示させることにした。ステータスバーはsetTimeout()に弱いので気休めだが。その他、文書内の不愉快な要素を除去する操作を追加。文中に登場する広告に威力を発揮。