GreaseMonkey没有处理我的按钮点击

时间:2014-03-23 18:04:48

标签: greasemonkey

我想让GreaseMonkey处理按钮点击。按钮的HTML在perl CGI中生成,由GM_xmlhttprequest访问。处理点击的javascript在我的用户脚本中。

这是用户脚本。它将div添加到网页的顶部,并通过AJAX填充来自我的CGI的div。

// ==UserScript==
// @name        button test
// @namespace   http://www.webmonkey.com
// @description test that I can intercept a button and process click with AJAX
// @include     http*
// @version     1
// @grant       GM_xmlhttpRequest
// ==/UserScript==

function processButton() {
    alert("got to processButton");
}

var myDiv;

var details = GM_xmlhttpRequest({
    method: 'GET',
    url:"http://localhost/cgi-bin/buttonTest",
    onload: function (response) {
        myDiv = document.createElement('div');
        myDiv.id = 'mydiv';
        myDiv.style.border = '4px solid #000';
        myDiv.innerHTML = response.responseText;
        document.body.insertBefore(myDiv, document.body.firstChild);
    }
});

这是我的CGI。

#!/usr/bin/perl -w                                                                                                                          

print "Content-type:text/html\n\n";
print qq|<button onclick="processButton()">Click here</button>| ;

当我加载网页时,我得到一个新的div,其中包含HTML按钮代码,正如我所料。当我点击按钮时没有任何反应。没有警报。我创建了一个HTML示例,以确保我没有做一些非常愚蠢的事情。这个例子很好。

<html>
<head>
<script>
function processButton() {
    alert("got to processButton");
}
</script>
</head>
<body>
<button onclick="processButton()">Click here</button>
</body>
</html>

出现控制台错误消息:

ReferenceError: processButton is not defined

我错过了什么?

1 个答案:

答案 0 :(得分:0)

如果我在包含按钮声明的HTML代码中声明processButton函数,然后将其放在我的userScript中,那么我的代码就可以了:

unsafeWindow.processButton = function() { 
    alert("hijacked processButton"); 
}

换句话说,我现在能够劫持GM的按钮。