FirefoxでスーパーBookmarkletを使う

3011 ワード

まず、本稿は「熱がある」火狐プレイヤーに見せたもので、他のブラウザユーザーは本稿を愛していない可能性がある.
多くの人はbookmarkletを使うのが好きで、自分のブックマークの欄に置いて、クリックする時に現在のページに対していろいろな操作を行います.例えば、原文の翻訳、例えば短いウェブサイト化、例えば「共有」、「コレクション」などです.GreaseMonkeyスクリプトとの違いは、これらの操作はページがロードされるたびに実行する必要はありません.自分がたまに必要なときにクリックして実行すればいいということです.
bookmarkletは、「javascript:」擬似プロトコルから始まるJavaScriptコードです.このコードは、現在のラベルページのページウィンドウ(window)で実行されます.たとえば、「javascript:alert(location)」では、「http://www.cnblogs.com/ziyunfei」というURL.
ブックマークバーで「chromejs:」という擬似プロトコルで始まるJavaScriptコードを現在のブラウザウィンドウの下(chromeWindow)で実行するツールを書きました.これにより、「chromejs:alert(location)」を実行すると、「chrome://browser/content/browser.xul「ああ、このXULページはFirefoxのメインインタフェースです.私が書いたこのツールをインストールしてから、次の例を試してみてください.
拡張:http://files.cnblogs.com/ziyunfei/SuperBookmarklet.xpi
または
UCスクリプト:http://files.cnblogs.com/ziyunfei/SuperBookmarklet.uc.js
ブラウザコンテキストで実行するJavaScriptコードには特別な権限があり、あまり使わないマウスジェスチャーコードをこのようなスーパーブックマークにしてブックマークバーに置くことができます.
以下にいくつかの例を挙げます.リンクはすべて「chromejs」の偽プロトコルで、ブックマークバーに直接ドラッグすることができます.
たとえば、Firefoxの再起動
Application.restart()

たとえば、現在のページのスクリーンショット
(function () {
    var canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
    canvas.width = content.document.documentElement.scrollWidth;
    canvas.height = content.document.documentElement.scrollHeight;
    var ctx = canvas.getContext("2d");
    ctx.drawWindow(content, 0, 0, canvas.width, canvas.height, "rgb(255,255,255)");
    canvas.toBlob(function (blob, blobURL) {
        saveImageURL(blobURL = URL.createObjectURL(blob), content.document.title + ".png", null, null, true, null, document);
        URL.revokeObjectURL(blobURL)
    })
})()

たとえば、エクスプローラを開く
(function () {
    var file = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties).get("WinD", Components.interfaces.nsILocalFile);
    file.append("explorer.exe");
    var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
    process.init(file);
    process.run(false, [","], 1);
})()

たとえば、オプティカル(光学式)ドライブを開く(windows)
Components.utils.import("resource://gre/modules/ctypes.jsm");
ctypes.open("winmm.dll").declare("mciSendStringW", ctypes.default_abi || ctypes.winapi_abi, ctypes.uint32_t, ctypes.jschar.ptr, ctypes.uint32_t, ctypes.unsigned_int, ctypes.uint32_t)("set cdaudio door open", 0, 0, 0);

これがスーパーブックマークで、強くて便利ではありませんか.