2012-03-05 15 views
0

私はGreasemonkeyスクリプトで作業しています。私がする必要があるのは、関数が呼び出される前にスクリプトを実行するか、関数の始めにスクリプトを実行することです。関数が呼び出される前に、Greasemonkeyスクリプトでコードを実行します。

問題は、関数が文書内にあり、Greasemonkeyファイル内にないことです。関数を上書きするようになりますが、スクリプトの終了後に実行する必要があるため、関数を上書きしません。

ここに私の完全なグリースモンキーのコードは、私が欠けているのか分からない:

<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);​</pre> 


を私が呼び出す必要がある関数はページに位置し、add_commentと呼ばれています。それはブール型である単一のパラメータを持っています。私はjavascriptに精通していないが、私はこの単純な拡張を行う必要があります。

本当にありがとうございます。

+0

は 'alert'ショーをしていますか? 'new Array(true)'を 'arguments'に置き換えることができます。 –

答えて

0

関数を変数に保存してから関数を上書きすることができます。

例:

var _func = functionIWant; 
functionIWant = function(){ 
    // Do whatever 
    _func(); // Call original function 
} 
+0

拡張ソースコードを追加しました。私はそれを働かせることができませんでした。よろしくです。 よろしくお願いします。 @GGG – user1250538

2

あなたの機能と、元の関数を呼び出すラッパー関数と機能を交換してください。

var originalFunction = someObject.someFunction; 

someObject.someFunction = function() { 

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

} 
0

このコードはaddJQuery()方法を介して目標ページにmain()を注入されます。これは、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. 
    } 
} 
関連する問題