web-dev-qa-db-ja.com

Firebug拡張機能を使用してGreasemonkeyスクリプトをデバッグする方法

Firebug拡張機能を使用してGreasemonkeyスクリプトをデバッグする方法が見つかりませんでした。

誰もこれを行う方法を知っていますか?

ありがとう。

49
WolveFred

更新:Mene + Shumanの修正は、Firefox 30およびFirebug 2で無効になりました。Firefox31may回避策を提供します(調査します)。それまでの間は、下記の「一般的な回避策」を使用してください。


更新:この回答は廃止されました。

_about:config_を開き、
_extensions.firebug.filterSystemURLs_をfalseに設定
それから、Firebugを使用して、他と同じようにGreasemonkeyスクリプトをデバッグできます。

これは、_@grant_モードに関係なく機能します。

Meneの答え-Shumanの支援を受けて を参照してください。



古い答え:

Greasemonkeyはサンドボックスで動作するため、Firebugはそれを見ることができません。これを回避する簡単な方法はありません。

一般的な回避策:

  1. FirebugのJavaScriptコンソールで、最初に_GM__関数を使用しないGMスクリプトのすべての部分をテストします。_GM__関数の使用を最小限にし、GM_log()まったく。

  2. すべての Firebugのconsole関数 は、GMスクリプト内でうまく機能します。

24
Brock Adams

現在のFirefoxおよびFirebugは、他のjavascriptと同様に現在のGreasemonkeyスクリプトをデバッグできるようになりました。 *.user.jsスクリプトのドロップダウンメニュー。コンソールも動作します。

これは少なくともFirefox 28.0およびFirebug 1.12.7で機能します。以前のバージョンを試したことはありません。

Screenshot of limited-case debugging


注:動作させるには、おそらくextensions.firebug.filterSystemURLsをfalseに。 Firebugの "Greasemonkeyスクリプトのプロファイリング"、バグトラッカーを参照してください。 (おかげで Shuman

8
Mene
var e = document.createElement("script");

e.src = 'http://www.xxxxxxxx.com/yyyyyyyy.js';
e.type="text/javascript";
document.getElementsByTagName("head")[0].appendChild(e);

これをxxx.user.jsに追加して、greasemonkeyにインストールできます。

その後、必要に応じてjsをデバッグできます。

8
bigml

ここにある他のソリューションはどれもうまくいきませんでしたが、Firefox拡張機能のデバッグ方法に関する Jan Odvarkoanswer は、GreaseMonkeyスクリプトでも完全に機能しました。

Firefox 19以降では、ブラウザ自体でビルトインJSデバッガーを使用できます。 about:configに移動して、次の2つの設定を設定します。

devtools.chrome.enabled: true
devtools.debugger.remote-enabled: true

ブラウザを再起動すると、[ツール]> [Web開発]> [ブラウザツールボックス]からブラウザデバッガにアクセスできます。

(着信接続を受け入れる必要があることに注意してください)

詳細については、 https://developer.mozilla.org/en-US/docs/Mozilla/Debugging/Debugging_JavaScript#JavaScript_Debugger

次に、ユーザースクリプトの名前を検索して、デバッグを開始します。

5
Hjulle

前述のとおり、ネイティブのFirefoxデバッガーを使用して実行できます。以下は、Firefoxの最新バージョンの手順です。

about:configで次の設定を設定します。

 devtools.chrome.enabled: true
 devtools.debugger.remote-enabled: true
 devtools.debugger.Prompt-connection: false

ToolsWeb DeveloperBrowser Toolboxでグローバルスクリプトデバッガウィンドウを開きます→Debugger(または Ctrl+Shift+Alt+I)。

ユーザースクリプトの名前を検索し、 デバッグ を開始します。

5
Annarfych

Chromebugではサンドボックススクリプトを見ることができます http://getfirebug.com/wiki/index.php/Chromebug_User_Guide ですが、Greasemonkeyで試したことはありません。

3
johnjbarton

-この答えは時代遅れです。上記の@Brock Adamsソリューションを使用してください-

メインスクリプトをGM経由で実行する代わりに、外部からロードします。したがって、スクリプトを挿入するためにGMを使用しています。

これは@bigmlと@Yuvalのソリューションのハイブリッドで、jqueryを使用します。また、フレームで動作します。

// ==UserScript==
// @name          My GM script
// @include     The website I want this to run on
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js 
// ==/UserScript==
$(document).ready(function() {
            // fetch jquery dependent scripts using $.getScript()
});
2
sijpkes

@bigmlの提案と同様に、ユーザースクリプトファイルを提供するローカルWebサーバー(Apache)をセットアップし、ユーザースクリプトに次の行に沿って何かを追加すると、特権なしで実行できます。

if (typeof GM_addStyle == "undefined") {
    loadScript("http://localhost/path/to/script.user.js");
}
else {
    runScript();
}

function loadScript(url) {
     var script = document.createElement('script');
     script.type = 'text/javascript';
     script.src = url;
     document.getElementsByTagName('head')[0].appendChild(res);
}

function runScript() {
     // ... whatever your userscript does ...
}

もちろん、特権コンテキストで実行することはないでしょう。ただし、この方法では、他のスクリプトと同様にスクリプトを簡単に継続的にデバッグできます。

1
Yuval

ChromeBugを試してみましたが、うまくいかないようです。

FireBugを使用すると、GMコードに「デバッガー」を追加することで成功の出発点になりました。これによりブレークポイントが発生し、スタック上の変数を検査できますが、正しいファイルは表示されません足を踏み入れることもできません。

FirebugMonkey(https:// addons.mozilla.org/en-US/firefox/addon/13623/)で最高の成功を収めました。最近のいくつかの説明のおかげで、GreaseMonkeyスクリプトの基本的なデバッグを行うようになりました。拡張ページのf0rsvinnによるコメント。私が http://groups.google.com/group/greasemonkey-users/browse_thread/thread/994cfa58c79d222 に投稿した手順を次に示します。

Greasemonkeyを使用するのではなく、スクリプトの周囲に独自のサンドボックスを作成することで、実際にGMをオフにする必要があります。いくつかのGMアスペクトは動作しませんが、例として、GM_getValueはundefinedを返します。

それでも、基本的なデバッグには機能し、何もしないよりはましです。

使用手順は次のとおりです。

  1. FireBug 1.5.4をインストールします(後のバージョンは動作しないようです)
  2. FireBugMonkeyをインストールする
  3. FireBugMonkeyのスクリプトマネージャーを使用して、デバッグするファイルを選択します
  4. GreaseMonkeyを無効にします(スクリプトはFireBugMonkey内で実行されますが、
  5. GreaseMonkey)
  6. FireBugMonkeyを有効にする
  7. FireBugでスクリプトを有効にする

ScriptManagerで追加したスクリプトは、FireBugスクリプトリストに表示されるはずです。

1
studgeek

他の人が言ったように、次のように簡単なHTTPサーバーをセットアップし、Greasemonkeyを使用してページに提供できます。

function loadScript(url) {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;
    document.getElementsByTagName('head')[0].appendChild(script);
}

WEBrickおよびPython -m SimpleHTTPServerはこれに適しています。GreaseMonkey内のドキュメントにカスタムイベントハンドラーを追加することで、GM _...関数をスクリプトに公開することもできます。

function gMHandler(e){
    GM_log(e.detail.message);
    e.detail.response = "Hi!"
}

document.addEventListener("gM", gMHandler, false);

次に、提供されるスクリプトで、任意のDOM要素でこのイベントを発生させると、ハンドラーが実行され、要素の応答パラメーターが変更されます。

$(document).ready(function() {
    var event = new CustomEvent(
        "gM", 
        {
            detail: { message: "Hello World!" }
            bubbles: true,
            cancelable: true,
        }
    );

    document.getElementById("AnyElement").dispatchEvent(event);
    alert("Response was: " + event.detail.response);
});
0
stellarpower