Я не нашел способ отлаживать сценарии Greasemonkey с расширением Firebug.
Кто-нибудь знает, как это сделать?
Спасибо.
Я не нашел способ отлаживать сценарии Greasemonkey с расширением Firebug.
Кто-нибудь знает, как это сделать?
Спасибо.
Обновление: Исправление Mene + Shuman теперь повреждено Firefox 30 и Firebug 2. Firefox 31 может предоставить обходные пути (будет исследовать). Тем временем используйте "Общие методы обхода", перечисленные ниже.
Обновление: Этот ответ устарел.
Если вы откроете about:config
и
установите extensions.firebug.filterSystemURLs
в false
то вы можете использовать Firebug для отладки Greasemonkey script, как и любой другой.
Это работает независимо от режима @grant
.
См. Ответ Мене - при помощи Шумана.
Старый ответ:
Поскольку Greasemonkey работает в песочнице, Firebug не может ее увидеть. Это нелегко.
Общие стратегии обхода:
Проверьте все части GM script, которые не используют функции GM_
, сначала в консоли Firebug JavaScript. Минимизируйте использование функций GM_
и не используйте GM_log()
вообще.
Все Firebug console
функции отлично работают из GM script.
Теперь Firefox и Firebug теперь могут отлаживать текущие сценарии Greasemonkey, как и любой другой javascript. Просто найдите *.user.js
script в выпадающем меню. Консоль также работает.
Это работает как минимум на Firefox 28.0 и Firebug 1.12.7; Я не пробовал более ранние версии.
Примечание. Чтобы заставить его работать, вам, вероятно, нужно установить extensions.firebug.filterSystemURLs
в значение false. См. "Профилирование скриптов Greasemonkey" в Firebug, трекер ошибок. (Благодаря 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 расширения отлично работали для сценариев GreaseMonkey:
В Firefox 19 или новее можно использовать встроенный отладчик JS в самом браузере. Перейдите к: config и установите следующие два префы:
devtools.chrome.enabled: true devtools.debugger.remote-enabled: true
После перезапуска браузера вы можете получить доступ к отладчику браузера через Инструменты > Веб-разработчик > Отладчик браузера.
(обратите внимание, что вы должны принять входящее соединение)
Смотрите еще: https://developer.mozilla.org/en/docs/Debugging_JavaScript
Затем просто найдите имя своего регистрационного имени и начните отладку.
Chromebug может видеть сценарии с песочницей, http://getfirebug.com/wiki/index.php/Chromebug_User_Guide, но я не пробовал его на Greasemonkey.
Это можно сделать с помощью собственного отладчика Firefox, как уже упоминалось ранее. Ниже приведена инструкция для современных версий Firefox.
Задайте следующие настройки в about:config
:
devtools.chrome.enabled: true
devtools.debugger.remote-enabled: true
devtools.debugger.prompt-connection: false
Откройте глобальное окно отладки script:
Open Menu
→ Developer
→ Browser Toolbox
→ Debugger
(или Ctrl + Shift + Alt + I).
Найдите имя вашего регистрационного имени и запустите debugging.
- этот ответ устарел, используйте решение @Brock Adams выше -
Загрузите свой основной script извне, а не запустите его через GM. Таким образом, вы просто используете GM для ввода script.
Это немного гибрид между @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()
});
Я пробовал 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:
Мне никогда не приходило в голову, что способ, которым он работает, - создать собственную песочницу вокруг script вместо использования Greasemonkey's, вы на самом деле нужно отключить GM. Есть некоторые аспекты GM, которые не будет работать, потому что script действительно не в GreaseMonkey. Например, GM_getValue возвращает undefined.
Тем не менее, он работает для базовой отладки - и лучше, чем ничего.
Шаги использования следующие:
Сценарии, добавленные в ScriptManager, должны быть видны в Список сценариев FireBug.
Подобно предложению @bigml, вы можете запустить его непривилегированным, если вы настроите локальный веб-сервер (apache) для работы с файлом usercript, а затем в своем пользовательском скрипте добавьте что-то вдоль строк:
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 ...
}
Конечно, вы не будете работать в привилегированном контексте. Но таким образом вы можете легко непрерывно отлаживать script как любой другой script.
Как говорили другие, вы можете настроить простой 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 хороши для этого. Мы также можем предоставить функции GM _... для script, добавив в документ GreaseMonkey специальный обработчик событий:
function gMHandler(e){
GM_log(e.detail.message);
e.detail.response = "Hi!"
}
document.addEventListener("gM", gMHandler, false);
а затем в обслуживаемом script, повышение этого события на произвольном элементе 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);
});