2010-03-03 159 views
2

我想要刪除與Grease Monkey和jQuery的外部網站上的警報框。彈出之前刪除警報框

HTML:

<!DOCTYPE html> 
<html> 
<body> 

<script>alert("Remove this Alert box with GreaseMonkey.");</script> 

<p>Hello world</p> 

</body> 
</html> 

的GreaseMonkey腳本(目前沒有jQuery的一部分):

// ==UserScript== 
// @name  Remove Alert box 
// @include  http://www.example.com/alert_remove/ 
// ==/UserScript== 

var node = document.getElementsByTagName('alert'); 
node.parentNode.removeChild(node); 

if(window.alert) { 
    alert("ALERT DETECTED"); // No response. 
} 

我不認爲這是可以使用jQuery因爲jQuery代碼僅觸發時,頁面被解決已加載並且警報可見($(document).ready)。

我可以從DOM中刪除警報元素嗎?
如果出現警報,我可以發送按鍵(13 = Enter)來處理警報嗎?

謝謝。

回答

1

由於Greasemonkey在頁面加載後腳本沒有被任何事件觸發,我認爲這是不可能實現你正在尋找的。

6

在加載頁面之前,Greasemonkey不運行,所以這對於Greasemonkey是不可能的。如果你真的確定了,你可以設置一個代理(例如squid),其方法類似於這個Upside-Down-Ternet技巧中使用的方法。

如果你能得到自己的JavaScript運行其他代碼調用alert之前,那麼你會想要做這樣的事情:

window.backupAlert = window.alert; 
window.alert = function() {return true}; 

(測試工作)

然後,您可以使用backupAlert函數代替alert在您自己的腳本中,但假設alert仍然存在的其他腳本不會顯示彈出窗口。

推理是這樣的:alert對象是窗口對象內的函數;它不是文檔中的標籤或DOM對象。

不,你不能用JavaScript發送按鍵。這是全球真實的;您可以觸發處理按鍵事件的功能,但不能發送OS點擊或按鍵事件。

+0

有趣的解決方案。彈出Alert時只需發送按鍵(Enter)怎麼樣?它可以使用AutoHotkey完成,但使用JavaScript? – 2010-03-04 05:11:07

+0

不,很遺憾沒有按鍵發送機制。您可以檢測按鍵,並處理它們,你可以觸發你定義的按鍵處理程序,但沒有辦法模仿的網頁之外的按鍵事件(包括在警報窗口,在瀏覽器等其他領域) – Ricket 2010-03-04 05:42:45

0

我不確定用javascript來做它,因爲js已經在渲染頁面上運行了。我的第一個想法是在頁面呈現之前抓住它。與PHP一樣。將外部網站的內容讀取到一個字符串中,然後剝離ALERT代碼行,然後顯示該頁面。

1

var node = document.getElementsByTagName('alert');
node.parentNode.removeChild(node);

  • 它不會在所有的工作,因「警戒」是不是一個節點,但「腳本」是。如果你管理的結果顯示警報之前執行您的GreaseMonkey腳本,你必須這樣做,而不是:

VAR節點=文件。的getElementsByTagName( '腳本')[0];
var str = node.firstChild.textContent;
VAR結果= str.replace(/警報( 「[\ W \ S。] *」);/「」);
node.firstChild.textContent = result;

  • 在FireFox中測試。那裏發生了什麼 - 你尋找第一個腳本標記(可以很容易地完成所有的腳本標記),然後你獲取它的內容(代碼),然後用空字符串替換alert,並將修改後的代碼放回原處。在你的情況下,結果頁面仍然會保留腳本標記,但沒有任何代碼;

希望它有助於