2013-09-24 73 views
-1

一個網頁更換外部腳本使用外部腳本:與Greasemonkey的

<script src="script/alerts.js" type="text/javascript"></script> 

在這個腳本文件存在,我想修改/替換功能。 功能如下:

function SayHello(msg1, msg2){ 
    alert(msg1); 
    alert(msg2; 
    // just saying hi and doing something i don't want to 
} 

我想把它變成像這樣:

function SayHello(msg1, msg2){ 
    // not saying hello 
    // but i'm doing everything i want to 
} 

我怎樣才能做到這一點,而無需使用unsafeWindow?

注意:該功能必須在內容頁面範圍內執行,而不是在Greasemonkey沙箱中執行。

+0

[在HTML頁面上更改Javascript的可能的重複](http://stackoverflow.com/questions/10472569/changing-javascript-on-an-html-page-out-of -my-control) –

+0

也是[停止執行Javascript函數(客戶端)或調整它](http://stackoverflow.com/q/3972038/331508)的副本。 –

回答

0

除非您在不安全窗口中運行您的代碼,否則您無法對unsafeWindow做任何事情。

什麼,但是你可以做的是重新定義喜歡的方法:

SayHello = function (msg1, msg2){ 
    // not saying hello 
    // but i'm doing everything i want to 
} 

將與這一個替代原有的功能。

您還應該記住,只有使用greasemonkey才能進入關閉狀態,並且您無法在腳本首次運行時替換已複製到局部變量的方法。

+0

不,該代碼在GM腳本中不起作用,如此答案中所示。 –

2

就這麼簡單:

location.assign("javascript:void(SayHello = function() {})"); 

它的工作原理,即使你需要使用任何GM_ *功能。 (@grant)

+1

這可以工作,但**只有當'SayHello()'是全局範圍** - 這是不清楚的問題。 –

+0

該腳本必須在內容頁面範圍內執行,而不是在Greasemonkey沙箱中執行。大約一年前我開始學習javascript/HTML。對不起,我不完全清楚我需要做什麼,這不是因爲我不想。我一回到家就會試試[this](http://stackoverflow.com/questions/10472569/changing-javascript-on-an-html-page-out-of-my-control),我會讓你知道 – Dani

+0

@Dani,通過「內容頁面」,你的意思是「目標頁面」。這個答案通過「位置黑客」來實現。唯一的缺點是'SayHello'必須位於目標頁面的全局範圍內。有可能;試一試。 –