Firebug拡張機能を使用してGreasemonkeyスクリプトをデバッグする方法が見つかりませんでした。
誰もこれを行う方法を知っていますか?
ありがとう。
更新:Mene + Shumanの修正は、Firefox 30およびFirebug 2で無効になりました。Firefox31may回避策を提供します(調査します)。それまでの間は、下記の「一般的な回避策」を使用してください。
更新:この回答は廃止されました。
_about:config
_を開き、
_extensions.firebug.filterSystemURLs
_をfalse
に設定
それから、Firebugを使用して、他と同じようにGreasemonkeyスクリプトをデバッグできます。
これは、_@grant
_モードに関係なく機能します。
Meneの答え-Shumanの支援を受けて を参照してください。
古い答え:
Greasemonkeyはサンドボックスで動作するため、Firebugはそれを見ることができません。これを回避する簡単な方法はありません。
一般的な回避策:
FirebugのJavaScriptコンソールで、最初に_GM_
_関数を使用しないGMスクリプトのすべての部分をテストします。_GM_
_関数の使用を最小限にし、GM_log()
まったく。
すべての Firebugのconsole
関数 は、GMスクリプト内でうまく機能します。
現在のFirefoxおよびFirebugは、他のjavascriptと同様に現在のGreasemonkeyスクリプトをデバッグできるようになりました。 *.user.js
スクリプトのドロップダウンメニュー。コンソールも動作します。
これは少なくともFirefox 28.0およびFirebug 1.12.7で機能します。以前のバージョンを試したことはありません。
注:動作させるには、おそらくextensions.firebug.filterSystemURLs
をfalseに。 Firebugの "Greasemonkeyスクリプトのプロファイリング"、バグトラッカーを参照してください。 (おかげで Shuman )
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をデバッグできます。
ここにある他のソリューションはどれもうまくいきませんでしたが、Firefox拡張機能のデバッグ方法に関する Jan Odvarko の answer は、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
次に、ユーザースクリプトの名前を検索して、デバッグを開始します。
前述のとおり、ネイティブのFirefoxデバッガーを使用して実行できます。以下は、Firefoxの最新バージョンの手順です。
about:config
で次の設定を設定します。
devtools.chrome.enabled: true
devtools.debugger.remote-enabled: true
devtools.debugger.Prompt-connection: false
Tools→Web Developer→Browser Toolboxでグローバルスクリプトデバッガウィンドウを開きます→Debugger(または Ctrl+Shift+Alt+I)。
ユーザースクリプトの名前を検索し、 デバッグ を開始します。
Chromebugではサンドボックススクリプトを見ることができます http://getfirebug.com/wiki/index.php/Chromebug_User_Guide ですが、Greasemonkeyで試したことはありません。
-この答えは時代遅れです。上記の@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()
});
@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 ...
}
もちろん、特権コンテキストで実行することはないでしょう。ただし、この方法では、他のスクリプトと同様にスクリプトを簡単に継続的にデバッグできます。
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を返します。
それでも、基本的なデバッグには機能し、何もしないよりはましです。
使用手順は次のとおりです。
ScriptManagerで追加したスクリプトは、FireBugスクリプトリストに表示されるはずです。
他の人が言ったように、次のように簡単な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);
});