如何使用greasemonkey和javascript将页面上每个字母的颜色更改为随机选择的颜色?
所以我读了一些类似的问题,我已经设法做了一些事情,比如改变背景颜色,但我还没能让它起作用 我想要的是,页面上的每个后续字母都随机着色。所使用的颜色空间并不重要,因为一旦它真正起作用,就很容易修复(我现在正在使用一个),但我甚至还不能让文本改变颜色。我希望我只是在某个地方犯了个愚蠢的错误 这就是我目前正在尝试的;它可以工作,但这取决于我使用的标记名,而且由于大多数网页的性质,如果我不小心,它会破坏很多东西如何使用greasemonkey和javascript将页面上每个字母的颜色更改为随机选择的颜色?,javascript,greasemonkey,Javascript,Greasemonkey,所以我读了一些类似的问题,我已经设法做了一些事情,比如改变背景颜色,但我还没能让它起作用 我想要的是,页面上的每个后续字母都随机着色。所使用的颜色空间并不重要,因为一旦它真正起作用,就很容易修复(我现在正在使用一个),但我甚至还不能让文本改变颜色。我希望我只是在某个地方犯了个愚蠢的错误 这就是我目前正在尝试的;它可以工作,但这取决于我使用的标记名,而且由于大多数网页的性质,如果我不小心,它会破坏很多东西 var elements=document.getElementsByTagName('p
var elements=document.getElementsByTagName('p');
对于(var i=0,l=elements.length;i要做到这一点,您只需要递归文本节点,小心不要丢弃子HTML元素
var x=document.querySelector(“body”);//等等。
buggerTextNodesIn(x);
函数buggerTextNodesIn(节点){
var wrapClass='gmColorBarf';
函数turnerizeTextNodes(节点){
if(node.nodeType===node.TEXT\u节点){
//---如果已包装此节点,则跳过此节点。
如果(!node.parentNode.classList.contains(wrapClass)){
var oldText=node.nodeValue;
var parent=node.parentNode;
对于(变量J=0,len=oldText.length;J=0;--K){
turnerizeTextNodes(node.childNodes[K]);
}
}
}
turnerizeTextNodes(节点);
}
函数getRandomColor(){
变量字母='0123456789ABCDEF'。拆分('');
var color='#';
对于(var J=0;J<6;++J){
颜色+=字母[Math.round(Math.random()*15)];
}
返回颜色;
}
请注意,要获取iframe内容,最简单的方法是调整要在iframe URL上触发的@include
、@exclude
和/或@match
指令--如果他们还没有。如果你想在一个长而复杂的页面上这样做,那么你所要求的将是困难的。如果你尝试这样的事情,有一些元素和子元素会断裂。我建议你只在、和标记上尝试更改字母颜色。@David我意识到在
上使用它完全是不可能的,很多页面都使用
进行格式化,而且嵌套的太多了。
,那么它是如何工作的呢?好吧,这在JSFIDLE中似乎工作得非常好,但当我把它放在greasemonkey中时就完全不行了(或者至少它们在chrome上的TamperMonkey中不工作,它声称是一样的…).你知道我该怎么做吗?这在脚本、FF上的Greasemonkey、Chrome上的Tampermonkey和Chrome上的纯内容脚本中都能很好地工作。只要仔细检查一下就可以了。链接或发布你尝试过的确切脚本。你的目标页面使用框架、iFrame、flash或AJAX吗?链接到目标页面。啊,太棒了,我想我必须这样做我刚刚做错了什么!!谢谢…我会好好利用这个。。。
var elements = document.getElementsByTagName('p');
for(var i=0,l=elements.length;i<l;++i) {
var str = elements[i].textContent;
elements[i].innerHTML = '';
for(var j=0,ll=str.length;j<ll;++j) {
var n = document.createElement('span');
elements[i].appendChild(n);
n.textContent = str[j];
n.style.color = get_random_colour();
}
}
function get_random_colour() {
var letters = '0123456789ABCDEF'.split('');
var colour = '#';
for (var i = 0; i < 6; i++ ) {
colour += letters[Math.round(Math.random() * 15)];
}
return colour;
}
var x = document.querySelector ("body"); // Etc.
buggerTextNodesIn (x);
function buggerTextNodesIn (node) {
var wrapClass = 'gmColorBarf';
function turnerizeTextNodes (node) {
if (node.nodeType === Node.TEXT_NODE) {
//--- Skip this node if it's already been wrapped.
if ( ! node.parentNode.classList.contains (wrapClass) ) {
var oldText = node.nodeValue;
var parent = node.parentNode;
for (var J = 0, len = oldText.length; J < len; ++J) {
var wrapSpan = document.createElement ("span");
wrapSpan.classList.add (wrapClass);
wrapSpan.textContent = oldText[J];
wrapSpan.style.color = getRandomColor ();
parent.insertBefore (wrapSpan, node);
}
parent.removeChild (node);
}
}
else if (node.nodeType === Node.ELEMENT_NODE) {
/*--- IMPORTANT! Start "bottom up" since we will be adding
gazillions of nodes and "top down" would skew our length measurement.
*/
for (var K = node.childNodes.length - 1; K >= 0; --K) {
turnerizeTextNodes (node.childNodes[K] );
}
}
}
turnerizeTextNodes (node);
}
function getRandomColor () {
var letters = '0123456789ABCDEF'.split ('');
var color = '#';
for (var J = 0; J < 6; ++J) {
color += letters[Math.round(Math.random() * 15)];
}
return color;
}