Подтвердить что ты не робот

Как отладить Greasemonkey script с расширением Firebug?

Я не нашел способ отлаживать сценарии Greasemonkey с расширением Firebug.

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

Спасибо.

4b9b3361

Ответ 1

Обновление: Исправление 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.

Ответ 2

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

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

Screenshot of limited-case debugging


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

Ответ 3

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

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

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

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

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

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

Смотрите еще: https://developer.mozilla.org/en/docs/Debugging_JavaScript

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

Ответ 6

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

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

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

Откройте глобальное окно отладки script: Open MenuDeveloperBrowser ToolboxDebugger (или Ctrl + Shift + Alt + I).

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

Ответ 7

- этот ответ устарел, используйте решение @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()
});

Ответ 8

Я пробовал 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.

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

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

  • Установить FireBug 1.5.4 (более поздние версии, похоже, не работают)
  • Установить FireBugMonkey
  • Используйте script Manager в FireBugMonkey, чтобы выбрать файлы, которые вы хотите отлаживать
  • Отключить GreaseMonkey (скрипты будут запускаться внутри FireBugMonkey, а не
  • GreaseMonkey)
  • Включить FireBugMonkey
  • Включить скрипты в FireBug

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

Ответ 9

Подобно предложению @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.

Ответ 10

Как говорили другие, вы можете настроить простой 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);
});