---------------------------------------小记
今天研究了下GreaseMonkey,看了别人写的"用户脚本",发现javascript、Dom、Xpath真是好东西,不过“支持”的问题就很让人头疼,最大的问题就是能不能解决兼容的问题。不过现在项目暂时用不到这些东东,作为知道来记下,现用现查吧。
大致记下 今天的知识点:
----------------------------------------------------- 函数
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
var postforms = document.evaluate(
2
"//form[translate(@method, 'POST ', 'post')='post']",
3
document,
4
null,
5
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
6
null);
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
var newBody =
2
'<html>' +
3
'<head>' +
4
'<title>My New Page</title>' +
5
'</head>' +
6
'<body>' +
7
'<p>This page is a complete replacement of the original.</p>' +
8
'</body>' +
9
'</html>';
10
window.addEventListener(
11
'load',
12![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
function()
{ document.body.innerHTML = newBody; },
13
true);
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
addEventListener
1![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
document.addEventListener('click', function(event)
{
2
// event.target 是被点击的元素
3![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
// 把你的代码放在这里
5![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
// 如果您想阻止默认点击动作
7
// (例如链接转向),使用下面这两条命令:
8
event.stopPropagation();
9
event.preventDefault();
10
}, true);
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
function newsubmit(event)
{
2
var target = event ? event.target : this;
3![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
// 在这里定义想做的操作
5
alert('Submitting form to ' + target.action);
6![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
// 调用真正的提交函数
8
this._submit();
9
}
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
// 捕获所有表单的 onsubmit 事件
12
window.addEventListener('submit', newsubmit, true);
13![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
// 如果脚本调用 someForm.submit(),onsubmit 事件不会发生,
15
// 所以我们需要重新定义 HTMLFormElement 类的 submit 方法。
16
HTMLFormElement.prototype._submit = HTMLFormElement.prototype.submit;
17
HTMLFormElement.prototype.submit = newsubmit;
正常情况下,当用户提交一个表单时,例如,点击表单中的 提交 按钮或者按 回车键
),都会触发 submit
事件。但是,当脚本调用 aForm.submit()
提交表单时,却不会触发 submit
事件。因此,您必须做两件事来捕获表单的提交事件:给 submit
事件增加事件监听,并且修改 HTMLFormElement
类的原型来重定向 submit()
方法到您的自定义函数上。
5
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
GM_xmlhttpRequest
1![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
GM_xmlhttpRequest(
{
2
method: 'GET',
3
url: 'http://greaseblog.blogspot.com/atom.xml',
4![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
headers:
{
5
'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
6
'Accept': 'application/atom+xml,application/xml,text/xml',
7
},
8![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
onload: function(responseDetails)
{
9
alert('Request for Atom feed returned ' + responseDetails.status +
10
' ' + responseDetails.statusText + '\n\n' +
11
'Feed data:\n' + responseDetails.responseText);
12
}
13
});
还有很多高级主题,API函数,比如GM_xmlhttpRequest都没有来的及看,项目急 等有机会了在回过头看吧~
示例代码来自 深入浅出GreaseMonkey ,更多代码可以到UserScript相关网站。