我想让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
我错过了什么?
答案 0 :(得分:0)
如果我在包含按钮声明的HTML代码中声明processButton函数,然后将其放在我的userScript中,那么我的代码就可以了:
unsafeWindow.processButton = function() {
alert("hijacked processButton");
}
换句话说,我现在能够劫持GM的按钮。