Как отладить скрипт Greasemonkey с расширением Firebug? - PullRequest
47 голосов
/ 16 августа 2010

Я не нашел способа отладки скриптов Greasemonkey с расширением Firebug.

Кто-нибудь знает, как это сделать?

Спасибо.

Ответы [ 10 ]

24 голосов
/ 16 августа 2010

Обновление: Исправление Mene + Shuman теперь исправлено с Firefox 30 и Firebug 2. Firefox 31 может предоставить обходные пути (исследует).А пока используйте «Общие стратегии обхода», перечисленные ниже.


Обновление: Этот ответ теперь устарел.

Если вы откроете about:config и
, установите для extensions.firebug.filterSystemURLs значение false
, то вы сможете использовать Firebug для отладки скрипта Greasemonkey, как и любой другой.

Это работаетнезависимо от режима @grant.

См. Ответ Мене - с помощью Шумана .



Старый ответ:

Поскольку Greasemonkey работает в песочнице, Firebug не может его видеть.Нет простого способа обойти это.

Общие стратегии обхода:

  1. Протестировать все части скрипта GM, которые не используют функции GM_, в JavaScript Firebugсначала консольМинимизируйте использование GM_ функций и вообще не используйте GM_log().

  2. Все Функции console Firebug прекрасно работают из скрипта GM.

8 голосов
/ 27 февраля 2014

Текущие Firefox и Firebug теперь могут отлаживать текущие сценарии Greasemonkey, как и любой другой javascript. Просто найдите ваш *.user.js скрипт в выпадающем меню. Консоль тоже работает.

Это работает по крайней мере на Firefox 28.0 и Firebug 1.12.7; Я не пробовал более ранние версии.

Screenshot of limited-case debugging


Примечание: чтобы заставить его работать, вы, вероятно, должны установить для extensions.firebug.filterSystemURLs значение false. См. «Профилирование скриптов Greasemonkey» в Firebug, трекере ошибок. (Спасибо Шуман )

8 голосов
/ 31 октября 2011
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 по своему желанию.

4 голосов
/ 23 ноября 2016

Это можно сделать с помощью встроенного отладчика Firefox, как уже упоминалось ранее. Ниже приведена инструкция для современных версий Firefox.

Установите следующие настройки в about:config:

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

Откройте окно глобального отладчика скриптов: Open Menu -> Developer -> Browser Toolbox -> Debugger (или Ctrl + Shift + Alt + I ).

Найдите имя вашего пользовательского скрипта и запустите debugging .

4 голосов
/ 29 августа 2016

Ни одно из других решений здесь не сработало для меня, но Ян Одварко ответ о том, как отлаживать расширения Firefox, также отлично работает для скриптов GreaseMonkey:

В Firefox 19 или более поздней версии можно использовать встроенный отладчик JS в самом браузере. Зайдите в about: config и установите следующие два префы:

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

После перезапуска браузера вы можете получить доступ к Отладчику браузера через Инструменты> Веб-разработчик> Отладчик браузера.

(обратите внимание, что вы должны принять входящее соединение)

Подробнее на: https://developer.mozilla.org/en/docs/Debugging_JavaScript

Затем просто найдите имя вашего пользовательского сценария и начните отладку.

3 голосов
/ 16 августа 2010

Chromebug может видеть скрипты с песочницей, http://getfirebug.com/wiki/index.php/Chromebug_User_Guide,, но я не пробовал это на Greasemonkey.

2 голосов
/ 30 июля 2012

- Этот ответ устарел, пожалуйста, используйте приведенное выше решение @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()
});
1 голос
/ 09 марта 2012

Как и в случае с предложением @ 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 ...
}

Конечновы не будете работать в привилегированном контексте.Но таким образом вы можете легко непрерывно отлаживать скрипт, как любой другой скрипт.

1 голос
/ 10 ноября 2010

Я пробовал 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, которые не будут работать, потому что скрипт на самом деле не в GreaseMonkey.Например, GM_getValue возвращает undefined.

Тем не менее, он работает для базовой отладки - и это лучше, чем ничего.

Шаги использования следующие:

  1. Установите FireBug 1.5.4 (более поздние версии, похоже, не работают)
  2. Установите FireBugMonkey
  3. Используйте диспетчер скриптов в FireBugMonkey для выбора файлов, которые вы хотите отлаживать
  4. Отключить GreaseMonkey(скрипты будут запускаться внутри FireBugMonkey, а не
  5. GreaseMonkey)
  6. Включить FireBugMonkey
  7. Включить скрипты в FireBug

Скрипты, которые вы добавили в ScriptManagerдолжен быть виден в списке скриптов FireBug.

0 голосов
/ 17 августа 2016

Как уже говорили другие, вы можете настроить простой 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 _... скрипту, добавив в документ пользовательский обработчик событий в GreaseMonkey:

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);
});
...