これを行う簡単な方法はありますか。また、運用方法の違いにより変更が必要なことはありますか?
2 に答える
これを行う最も簡単な方法は次のとおりです。
URL デコーダを介してブックマークレット コードを実行します。
javascript:alert%20('Hi%20Boss!')%3B
たとえば、次のようになります。
javascript:alert ('Hi Boss!');
先頭
javascript:
を剥がします。結果:alert ('Hi Boss!');
このコードを Greasemonkey ファイルの末尾に追加します。たとえば、次のコードで
Hello World.user.jsという名前のファイルを作成します。// ==UserScript== // @name Hello World! // @description My first GM script from a bookmarklet // @include https://stackoverflow.com/questions/* // @grant none // ==/UserScript== alert ('Hi Boss!');
Hello World.user.jsをFirefox ( CtrlO) で開きます。Greasemonkey は、スクリプトのインストールを求めるプロンプトを表示します。
@include
これで、ブックマークレット コードは、 and@exclude
ディレクティブで指定したページで自動的に実行されます。更新: 最大限の互換性を確保するに
@grant none
は、Greasemonkey および Tampermonkey の新しいバージョンで追加されたディレクティブを使用してください。
重要:
ユーザースクリプトは、ブックマークを有効にするよりもずっと早く実行されます。通常、これは問題ではありません。
ただし、場合によっては、ページの一部が完全に読み込まれるまで待つ必要があります。
その場合、waitForKeyElementsのようなテクニック/ユーティリティを使用できます。AJAX 駆動のサイトで適切なコントロールを選択してアクティブ化するも参照してください。
それでも新しいスクリプトが機能しない場合は、「非常に単純な Greasemonkey スクリプトが実行されていませんか?」を必ずお読みください。. 手順に従い、新しいスクリプトの問題について開いた質問には、指定された情報を含めてください。
これは、 「通常の」JS と Greasemonkey の違いによる一般的な落とし穴を回避するための非常に優れた記事です。
最初に最も重要なこと:
関数を文字列として使用しない
で ください。window.setTimeout("my_func()", 1000);
window.setTimeout(my_func, 1000);
window.setTimeout(function(){doSomething(); doSomethingOther();}, 1000);
むしろ設定しないでくださいelement.onclick
element.addEventListener("click", my_func, true);
通常さまざまな DOM オブジェクトを返す一部のコードは、Greasemonkey 環境では XPCNativeWrapper でラップされたオブジェクトを返します。これはセキュリティ上の理由によるものです。
一部のメソッドとプロパティは「透過的」であり、ラップされたオブジェクトで呼び出すことができますが、そうでないものもあります。これを回避する方法については、前述の記事を参照してください。また、(これは一般的には推奨されませんが、テストなどのために) 使用することもできます。それは、 Greasemonkey で
obj.something
/obj.something()
が動かない場合は / を試すことobj.wrappedJSObject.something
ですobj.wrappedJSObject.something()
。