表示中のDOMに対するSCRIPT(Function)追加

[新着] Webテンプレートを仮オープンしました



0   名前: yoro : 2006/07/25(火) 16:33  ID:UkbhveQ3
このところ頻繁にお世話になりますyoroです。

これも、コンテキストメニューに関する質問ですが、
以下のスレッドではPidさんにイベントの追加をご教授戴きました。

http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi?mode=view&no=549
external.menuArguments.location.href = 'javascript:void(document.attachEvent ("onclick", function () { alert ("OK"); } ));';

これを進化させ? コンテキストメニューから
呼び出し元のDOMにSCRIPT(Function)追加できないかな・・
と考えています。⇒ 可能で有ればコンテキストメニューの機能拡大がかなり期待できそうです。

はたして、そのようなことが可能でしょうか?

私の少ない知識で色々試しましたが、Pidさんのコメントのように
> 確かに attachEvent でも onclick でもイベントが発動しませんね。と言いますか,
> innerHTML/outerHTML を上書きしようとするとエラーになりますので,
> 基本的に書き込み不可ではないでしょうか
> (しかし,それらしい記述をまだ MSDN 内で見つけていません)。

なにかご経験・情報をお持ちの方、アドバイス頂ければ幸いです。

1   名前: Pid : 2006/07/25(火) 16:33  ID:TDh0RvEz
もともと,>>0 は Bookmarklet の方法です。

// 実際には 1 行につなげて,アドレスバー・ロケーションバーで実行する。
// また,URI で使えない文字をパーセント符号化しておかねばならない。
javascript:
(function () {
    var nodes = document.getElementsByTagName ('a');
    var I = nodes.length;
    var i = 0;
    
    while (i < I) {
        var n = nodes[i++];
        // a 要素に対する処理
    }
} )();


body 要素を汚さないスクリプトをお書きになれるなら,ページを自由自在に操れます。Mozilla/Firefox の Greasemonky スクリプトや,Opera の user.js なんかも参考になるでしょう。

ただ IE の場合,アドレスバーの文字数制限の関係上,あまり長いものは書けなかった気がします。そこで,

・外部スクリプトを用意しておく
・Bookmarklet で script 要素を生成し,外部スクリプトを組み込む

としなければなりません(ローカルファイルでない限り,今のところクロスドメイン制限はないはずです)。こうすれば,任意のページにさまざまなツール・イフェクトを組み込むことができます。


繰り返しますが,上記は回りくどい方法なので,IE ならもっとうまいやり方があると思います。ご存知の方はよろしくお願いします m(_ _)m。

2   名前: yoro : 2006/07/25(火) 16:33  ID:UkbhveQ3
Pidさん、いつもながらご教授ありがとうございます。

external.menuArguments.location.href にスクリプトを代入することで、どうして
機能するかが、イマイチ理解できませんでしたがBookmarkletと考えると納得です。

私はIE6SP2なので、文字数制限488を意識する必要がありそうです。
Web上に外部スクリプトを用意しておく、事がちょっと面倒ですが・・
IE7beta2では2084に増えているそうで、今後に期待です。
http://subsimple.com/bookmarklets/rules.asp

ところで、Bookmarkletの正式?な規定書・仕様書は有るのでしょうか?
Webを捜しても個人HPばかりで見つかりませんでした。

3   名前: Pid : 2006/07/25(火) 16:33  ID:dTnzt6mB
> Bookmarkletの正式?な規定書・仕様書

JSON みたいには仕様化されてないんじゃないでしょうか(そもそも javascript: スキーム自体,IANA 未登録という意味では非公式なものですし)。

でも,戻り値が undefined ならトラバーサルが発生しない,というのはどこから来たのでしょうね。ちょっと調べてみます(どこかで読んだ気がするのですが思い出せない……)。

> IE7beta2では2084に増えているそうで

おお,そうなんですか。楽しみですね。

一覧へ戻る