javascriptを拡張機能のコンテキストで実行できる Execute JS

先日、ブックマークレットとおんなじくらいお手軽にFirefoxで開いているページの中身をスクリプトに渡して処理したりできないかなーと思って Browse Web and Developer Tools :: Firefox Add-ons を見ていたらFirefoxの拡張機能を作るときに少し役に立ちそうなものを発見しました。

Execute JS という名前のextensionで、説明に
# Execute arbitrary (multiline) JavaScript Code in every window you like.
# Evaluting the properties of an object.
# Modifying functions on the fly i.e. you can search for functions, load and edit them and eventually save the modified function.
と書かれているとおり入力したjavascriptのコードを実行してくれるものです。
javascriptのコードを実行するだけだったら Firebug でもできるわけですがFirebugと違うのは Execute JS は入力したjavascriptコードが実行されるコンテキストがextensionとおんなじコンテキストなところです。extensionのコンテキストだと何が違うかといえばふつうはアクセスできない Components.classes にアクセスできてXPCOMオブジェクトを操作できるところです。 XPCOMをつかうと何でもできますが、とりあえず Execute JS から cmd.exe を実行してみましょう。ローカルファイルの実行方法は Code snippets:Running applications - MDC にあるのでこれをまねして書きます。
var file = Components.classes["@mozilla.org/file/local;1"]
                     .createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("c:\\windows\\system32\\cmd.exe");
var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);
process.init(file);
var args = [];
process.run(false, args, args.length);
を実行するコードとして入力して実行すると
Cmd
cmd.exeが起動します。

Firebugのコンソールでは Components.classes にアクセスできないのでextensionのコードスニペットを見てためしにちょっと動かしてみたい、というときには使えませんが Execute JS ならComponents.classesにアクセスできるので便利じゃないでしょうか。

それぞれのスクリプト実行方法

Components.classesにアクセスできたりアクセスできなかったりするのの差はどこでできるのかも調べてみましたが、けっきょくはっきりとはわかりませんでした。 Execlute JS は渡されたコードを指定されたウインドウを getWindowForResource で取得したオブジェクトのevalメソッドでjavascriptのコードを実行しています。それに対してFirebugは渡されたコードがextensionのコンテキストで実行されることを避けるためか、最終的に
function injectScript(script, win)
{
    win.location = "javascript: " + script;
}
というコードで渡されたスクリプトを実行していました。 正確なところはわかりませんがevalしないでlocationにjavascript:で代入することで実行コンテキストをextensionから切り離して、ふつうのウインドウのコンテキストで実行させることができるようです。

tags

  • Firefox
  • extension
  • 「javascriptを拡張機能のコンテキストで実行できる Execute JS」のはてなブックマーク数
  • 「javascriptを拡張機能のコンテキストで実行できる Execute JS」deliciousブックマーク数
  • 「javascriptを拡張機能のコンテキストで実行できる Execute JS」をはてなブックマークに追加
  • save "javascriptを拡張機能のコンテキストで実行できる Execute JS" to del.icio.us
  • 「javascriptを拡張機能のコンテキストで実行できる Execute JS」をリアルタイムブログ検索
  • permalink
  • Apache runs on iPhone!!
  • ほかのFirefox extensionからFirebugのコンソールにデバッグ出力を出す

comments

TypeKey Enabled
スタイル用のHTMLタグが使えます。
*required

trackbacks

トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。

http://labs.gmo.jp/mt/mt-tb.cgi/148
©2010 Kentaro Kumagai, GMO Internet Labs., GMO Internet, inc.
bits and bytes
2007 .07. 30 18:00

tagcloud

  • API1
  • C/C++2
  • E4X1
  • FUSE2
  • Firefox18
  • HTML4
  • IE1
  • MySQL1
  • OSX4
  • Opera2
  • PHP4
  • XML1
  • XPCOM4
  • XPath3
  • apache2
  • binary2
  • book1
  • data11
  • debug4
  • design1
  • experiments3
  • extension10
  • google gears1
  • google maps API1
  • greasemonkey3
  • httpd5
  • javascript17
  • linux1
  • logging2
  • mobile3
  • perl4
  • tips4
  • tool11
  • vim2
  • visualization2
  • widget1
  • wii1
  • windows7
  • サービス6
  • 和訳1

Archives

  • 2008.02 (6)
  • 2008.01 (3)
  • 2007.12 (4)
  • 2007.11 (5)
  • 2007.10 (4)
  • 2007.09 (4)
  • 2007.08 (4)
  • 2007.07 (8)
  • 2007.06 (7)
  • 2007.05 (4)
  • 2007.04 (5)
  • 2007.03 (6)
  • 2007.02 (4)
  • 2007.01 (6)

about

  • bits and bytesのXML
  • 「bits and bytes」のCreative Commons
  • Powered by Movable Type
  • イベントと地図 - モグ
  • Use ecto to blog!
  • bits and bytesのはてなブックマーク数
  • bits and bytesをMy Yahoo!に追加
  • Subscribe with Bloglines