人々が Greasemonkey スクリプトで使用している、あまり知られていないが便利な機能やテクニックにはどのようなものがありますか?
(回答ごとに機能を 1 つだけにしてください。)
類似のスレッド:
人々が Greasemonkey スクリプトで使用している、あまり知られていないが便利な機能やテクニックにはどのようなものがありますか?
(回答ごとに機能を 1 つだけにしてください。)
類似のスレッド:
==UserScript==
...
@require http://ajax.googleapis.com/ajax/framework-of-your/choice.js
==/UserScript==
Greasemonkeyスクリプトは、多くの場合、ページ上のコンテンツを検索する必要があります。DOMを掘り下げる代わりに、XPathを使用して目的のノードを見つけてみてください。このdocument.evaluate()
メソッドを使用すると、XPath式を提供し、一致するノードのコレクションを返します。これがあなたが始めるための素晴らしいチュートリアルです。例として、phpBB3投稿のリンクを新しいタブ(デフォルトのスキン)で開くように作成したスクリプトを次に示します。
// ==UserScript==
// @name New Tab in phpBB3
// @namespace http://robert.walkertribe.com/
// @description Makes links in posts in phpBB3 boards open new tabs.
// ==/UserScript==
var newWin = function(ev) {
var win = window.open(ev.target.href);
if (win) ev.preventDefault();
};
var links = document.evaluate(
"//div[@class='content']//a[not(@onclick) and not(@href='#')]",
document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0; i < links.snapshotLength; i++) {
var link = links.snapshotItem(i);
link.addEventListener("click", newWin, true);
}
コードで使用されるXPath式は、a
1)属性を持たないonclick
、2)href
属性がに設定されていない"#"
、3)属性がに設定されているdiv
s内にあるすべての要素を識別します。class
"content"
ファイルをホストする場所がなくても、データ URI を介して、スクリプトでページにグラフィックを追加できます。
たとえば、ここに小さなボタン グラフィックがあります。
var ボタン = document.createElement("img"); button.src = "data:image/gif;base64," + "R0lGODlhEAAQAKEDAAAA/wAAAMzMzP///yH5BAEAAAMALAAAAAAQABAAAAIhnI+pywOtwINHTmpvy3rx" + "nnABLAUCKZkYoGItJZzUTCMFACH+H09wdGltaXplZCBieSBVbGVhZCBTbWFydFNhdmVyIQAAOw==" somenode.appendChild(ボタン);
これはオンラインの画像エンコーダーです。
そして、Data URI 標準に関するウィキペディアの記事。
を介して mozilla 設定値として保存することにより、ページの読み込み後もデータを保持できますGM_setValue(keyname, value)
。
これは、特定のブラウザでスクリプトが実行された回数を集計する簡単な例です。
var od = GM_getValue("オドメーター", 0); OD++; GM_setValue("オドメーター", od); GM_log("走行距離=" + od);
GM 値は、Cookie 値にアクセスできるのは元のドメインのみであり、GM 値はそれらを作成したスクリプトのみがアクセスできるという点で Cookie に似ています。
GM_setValue は通常、32 ビットの整数、文字列、およびブール値のみを格納しますが、uneval() メソッド (およびその後の検索時の eval()) を利用して任意のオブジェクトを格納できます。(JavaScript オブジェクトではなく) 純粋な JSON 値を扱っている場合は、JSON.stringify を使用して保存し、JSON.parse を使用して取得します。これにより、より高速かつ安全になります。
var foo={people:['Bob','George','Smith','Grognak the Destroyer'],pie:true};
GM_setValue('myVeryOwnFoo',uneval(foo));
var fooReborn=eval(GM_getValue('myVeryOwnFoo','new Object()'));
GM_log('People: '+fooReborn.people+' Pie:'+fooReborn.pie);
この場合、デフォルトとして "new Object()" を使用する傾向がありますが、"({})" を使用することもできます。「{}」はオブジェクトではなく文字列として評価されることに注意してください。いつものように、 eval() は慎重に。
匿名統計
アクセス ログを提供する基本的なホスティング サービスがあると仮定すると、スクリプトの基本的な使用統計を簡単に追跡できます。
var img = document.createElement("img"); img.src = "http://mysite.com/logo.gif"; document.body.appendChild(img);
これで、ユーザーがスクリプトを実行するたびに、ホスティング サービスがその gif ファイルにヒットを登録します。
複数のスクリプトを追跡するには、それぞれに異なる gif ファイルを使用します。または、何らかの差別化パラメーターを URL に追加します (例: http://mysite.com/logo.gif?zippyver=1.0
)。
GreaseMonkeyスクリプトはDOMの準備ができたときに実行されるため、onloadイベントを追加する必要はなく、GreaseMonkeyスクリプトですぐにDOMの操作を開始します。
便利な XPath 手法は、既に見つかったノードに関連する一致を指定することです。stackoverflow の不自然な例として:
// 最初に、ページの上部にあるユーザー名のリンクを取得します var hdrdiv = document.evaluate( "//div[@id='headerlinks']/a[1]", ドキュメント, null, XPathResult.FIRST_ORDERED_NODE_TYPE、null).singleNodeValue; // これで、それに続くテキストを取得できます (ユーザーの評判スコア) // (現在、hdrdiv はドキュメントではなく contextNode 引数であることに注意してください) var reptext = document.evaluate( "次の兄弟::スパン", hdrdiv, null, XPathResult.FIRST_ORDERED_NODE_TYPE、null).singleNodeValue; alert("評判スコア: " + reptext.textContent);
contextNode、祖先、子孫、前、次に対して、任意の方向で一致させることができます。役立つ XPath リファレンスを次に示します。
スクリプト ヘッダー値 (@name、@description、@version など) を取得可能にできます。これは、スクリプト内の複数の場所で同じ定数値を維持するよりも望ましい方法です。
スクリプト内から Greasemonkey メタデータにアクセスするを参照してください。