Выполнить код в скрипте Greasemonkey перед вызовом функции - PullRequest
0 голосов
/ 05 марта 2012

Я работаю над скриптом Greasemonkey. Что мне нужно сделать, это выполнить скрипт перед вызовом функции или выполнить скрипт в начале функции.

Проблема в том, что функция находится в документе, а не в файле Greasemonkey. Это будет похоже на перезапись функции, но без перезаписи, потому что она должна быть выполнена после завершения сценария.

Вот мой полный код Greasemonkey, я не знаю, что мне не хватает:

<code><pre>// ==UserScript==
// @name           appname
// @version        1.0.0
// @author         me
// @description    blah
// @include        http://www.runhere.net/*
// @exclude        http://www.notinhere.com/*
// @run-at         document-end
// ==/UserScript==

function addJQuery(callback) {
    var script = document.createElement("script");
    script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js");
    script.addEventListener('load', function() {
        var script = document.createElement("script");
        script.textContent = "(" + callback.toString() + ")();";
        document.body.appendChild(script);
    }, false);
    document.body.appendChild(script);
}

function main() {
    var originalFunction = unsafeWindow.add_comment;
    unsafeWindow.add_comment = function(go_last_page) {
        alert("if it is shown, then works!");
        originalFunction.apply(unsafeWindow, new Array(true));
    }
}

//Load JQuery and execute function
addJQuery(main);​


Функция, которую мне нужно вызвать, находится на странице и называется add_comment. У него есть единственный параметр, который является логическим типом. Я не знаком с javascript, но мне нужно сделать это простое расширение.

Я очень ценю вашу помощь.

Ответы [ 3 ]

2 голосов
/ 05 марта 2012

Замените функцию функцией-оберткой, которая вызывает вашу функцию, а затем исходную функцию.

var originalFunction = someObject.someFunction;

someObject.someFunction = function() {

    executeMyScript();
    return originalFunction.apply(someObject, arguments);

}
0 голосов
/ 06 марта 2012

Этот код вводит main() на целевую страницу с помощью метода addJQuery(). Это означает, что неправильно использовать unsafeWindow - что будет неопределенным.

Кроме того, вам, вероятно, не нужно использовать .apply() в этом случае. Наконец, код использует переменную go_last_page, которая, кажется, нигде не определена.

Таким образом, код будет:

function main () {
    var originalFunction    = add_comment;
    add_comment             = function (/*go_last_page*/) {
        alert ("if it is shown, then works!");
        /* This next line is probably not needed.  "this" and "arguments" are
            special JS variables.
        originalFunction.apply (this, arguments);
        */
        originalFunction (true);  //-- Simplified call is probably sufficient.
    }
}
0 голосов
/ 05 марта 2012

Вы можете сохранить функцию в переменной, а затем перезаписать функцию.

Пример:

var _func = functionIWant;
functionIWant = function(){
   // Do whatever
   _func(); // Call original function
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...