2012-03-05 225 views
0

我正在使用Greasemonkey腳本。我需要做的是在函數被調用之前執行腳本,或者在函數的開頭執行腳本。在調用函數之前執行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'節目?你可以用'arguments'替換'new Array(true)'。 – 2012-03-05 22:48:43

回答

0

您可以將該函數保存到一個變量,然後覆蓋函數。

例子:

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

我已添加擴展程序源代碼。我無法讓它工作。 此致敬禮。 @GGG – user1250538 2012-03-05 19:37:51

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. 
    } 
} 
相關問題