我有一个在GM_addStyle
但不在jQuery中的选择器。我想使用CSS3中没有的jQuery :contains()
。
但是,当我查看源代码时,我的页面上似乎不存在该ID,但它是动态生成的 在整个页面加载后如何告诉Tampermonkey运行JS?
我尝试了不同的JS @run-at
设置,但没有运气。
//works
GM_addStyle(" \
#T301444200 > tbody > tr.SelPrimary > td:nth-child(1) > nobr > span{ color: red; } \
");
//does not work
$("#T301444200 > tbody > tr.SelPrimary > td:nth-child(1) > nobr > span").css("color","blue","important");
答案 0 :(得分:0)
有时你可以等待窗口load
事件,但一般来说,你必须使用支持AJAX的技术。请参阅Fire Greasemonkey script on AJAX request。
因此,使用waitForKeyElements(),完整的Tampermonkey脚本就像:
// ==UserScript==
// @name _Use jQuery on AJAXed content
// @match http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
//- The @grant directive is needed to restore the proper sandbox.
waitForKeyElements (
"#T301444200 > tbody > tr.SelPrimary > td:nth-child(1) > nobr > span", styleNode
);
function styleNode (jNode) {
jNode.css ("color", "blue");
}
请注意.css("color","blue","important");
为not valid jQuery,在这种情况下可能不需要。
如果这是您 需要!important
的罕见网站之一,请使用:
jNode[0].style.setProperty ("color", "blue", "important");
在styleNode()
内,上面。
答案 1 :(得分:0)
function waitForElement(id, callback, timeout){
if('undefined' == typeof timeout) timeout = 30;
timeout = timeout * 1000;
var time = 0;
var poops = setInterval(function(){
if(time >= timeout) clearInterval(poops);
if(document.getElementById(id)){
clearInterval(poops);
callback();
}
time += 100;
}, 100);
}
(function(callback) {
var script = document.createElement("script");
script.setAttribute("src", "//code.jquery.com/jquery-1.11.3.min.js");
script.addEventListener('load', callback);
document.body.appendChild(script);
})
// main codez go in here
(function(){
window.alert($('a').length+" Links");
});