12

人々が Greasemonkey スクリプトで使用している、あまり知られていないが便利な機能やテクニックにはどのようなものがありますか?

(回答ごとに機能を 1 つだけにしてください。)

類似のスレッド:

4

10 に答える 10

13
==UserScript==
...
@require http://ajax.googleapis.com/ajax/framework-of-your/choice.js
==/UserScript==
于 2008-09-27T20:34:26.400 に答える
13

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式は、a1)属性を持たないonclick、2)href属性がに設定されていない"#"、3)属性がに設定されているdivs内にあるすべての要素を識別します。class"content"

于 2008-09-23T15:06:50.663 に答える
10

ファイルをホストする場所がなくても、データ URI を介して、スクリプトでページにグラフィックを追加できます。

たとえば、ここに小さなボタン グラフィックがあります。

var ボタン = document.createElement("img");
button.src = "data:image/gif;base64,"
    + "R0lGODlhEAAQAKEDAAAA/wAAAMzMzP///yH5BAEAAAMALAAAAAAQABAAAAIhnI+pywOtwINHTmpvy3rx"
    + "nnABLAUCKZkYoGItJZzUTCMFACH+H09wdGltaXplZCBieSBVbGVhZCBTbWFydFNhdmVyIQAAOw=="
somenode.appendChild(ボタン);

これはオンラインの画像エンコーダーです。

そして、Data URI 標準に関するウィキペディアの記事。

于 2008-09-24T15:31:44.667 に答える
8

を介して mozilla 設定値として保存することにより、ページの読み込み後もデータを保持できますGM_setValue(keyname, value)

これは、特定のブラウザでスクリプトが実行された回数を集計する簡単な例です。

var od = GM_getValue("オドメーター", 0);
OD++;
GM_setValue("オドメーター", od);
GM_log("走行距離=" + od);

GM 値は、Cookie 値にアクセスできるのは元のドメインのみであり、GM 値はそれらを作成したスクリプトのみがアクセスできるという点で Cookie に似ています。

于 2008-09-23T14:06:37.577 に答える
5

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() は慎重に。

于 2009-03-19T23:49:02.093 に答える
3

匿名統計

アクセス ログを提供する基本的なホスティング サービスがあると仮定すると、スクリプトの基本的な使用統計を簡単に追跡できます。

  1. 自分の Web サイトに gif ファイル (ロゴ画像など) を配置します。
  2. スクリプトで、gif を参照するページに img 要素を添付します。
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)。

于 2008-09-23T14:27:16.063 に答える
2

GreaseMonkeyスクリプトはDOMの準備ができたときに実行されるため、onloadイベントを追加する必要はなく、GreaseMonkeyスクリプトですぐにDOMの操作を開始します。

于 2008-09-26T00:20:37.537 に答える
2

便利な 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 リファレンスを次に示します。

于 2008-09-25T14:09:35.760 に答える
1

スクリプト ヘッダー値 (@name、@description、@version など) を取得可能にできます。これは、スクリプト内の複数の場所で同じ定数値を維持するよりも望ましい方法です。

スクリプト内から Greasemonkey メタデータにアクセスするを参照してください。

于 2008-09-24T02:07:21.697 に答える