我有以下简单的Greasemonkey脚本:
// ==UserScript==
// @name MetaCPAN Everywhere
// @description Add to every link to CPAN a link to MetaCPAN on a Google results page.
// @namespace http://ajct.info
// @match http://*/*
// @version 0.1
// ==/UserScript==
(function() {
var page_links = document.links;
for (var i=0; i<page_links.length; i++){
if (page_links[i].href.match(/http:\/\/search\.cpan\.org\/perldoc\?(.*?)$/i)) {
var match = page_links[i].href.match(/http:\/\/search\.cpan\.org\/perldoc\?(.*?)$/i);
var span = document.createElement("span");
span.innerHTML = " <a href=\"http://www.metacpan.org/module/"+match[1]+"\">MetaCPAN</a>";
page_links[i].parentNode.insertBefore(span, page_links[i].nextSibling);
}
}
})();
如果我通过firebug运行JavaScript代码段,它会做正确的事情,但如果我安装它并访问搜索结果页面,它似乎不会执行脚本。
这可能是微不足道的,但任何人都可以指出我错过的东西吗?
答案 0 :(得分:1)
我发现一些脚本虽然非常简单但不能在chrome中运行,但是我确实找到了一个完全支持greasemonkey脚本的chrome扩展,它被称为Tampermonkey
答案 1 :(得分:1)
主要的是Google ajaxes-in几乎所有结果,所以你需要一种方法来等待第一批并检查以后的批次。
有很多技巧。一个简单的方法是使用计时器:
//--- This handles both page-load delays, and AJAX changes.
var chkInterval = setInterval (checkForResultsLinks, 500);
function checkForResultsLinks () {
var links = document.querySelectorAll ('#search a');
if (links) {
for (var J = links.length - 1; J >= 0; --J) {
var link = links[J];
if (link.weHaveProcessed)
continue;
if (link.href.match (/http:\/\/search\.cpan\.org\/perldoc\?(.*?)$/i) ) {
var match = link.href.match (/http:\/\/search\.cpan\.org\/perldoc\?(.*?)$/i);
var span = document.createElement("span");
span.innerHTML = " <a href=\"http://www.metacpan.org/module/"+match[1]+"\">MetaCPAN</a>";
link.parentNode.insertBefore (span, link.nextSibling);
link.weHaveProcessed = true;
}
}
}
}
备注:强>
div
内,ID为“search”。// @run-at document-end
指令添加到此类脚本中。 当前脚本的@match
指令过于宽泛,脚本将在每个网页上触发!
您可能希望将其限制为:
// @match http://www.google.com/*
// @match http://google.com/*
没有必要或指向将代码包装在匿名函数中,例如:(function() { ... })();
。