Javascript 代码可以在控制台/草稿行中工作,但不能在Greasemonkey脚本中工作?
我正试着写一个脚本来放大地图 我已经让jQuery在Firefox草稿行中工作。这个脚本正是我想要完成的:Javascript 代码可以在控制台/草稿行中工作,但不能在Greasemonkey脚本中工作?,javascript,jquery,greasemonkey,tampermonkey,Javascript,Jquery,Greasemonkey,Tampermonkey,我正试着写一个脚本来放大地图 我已经让jQuery在Firefox草稿行中工作。这个脚本正是我想要完成的: $('div').filter(function(){ return $(this).css('width') == '648px' }).css({"width":"900px","height":"550px"}); 但当我把它粘贴到Greasemonkey脚本中时,它就不起作用了。如果我添加一些console.logs进行调试,我可以验证脚本是否正在运行,过滤器是否正常工作
$('div').filter(function(){
return $(this).css('width') == '648px'
}).css({"width":"900px","height":"550px"});
但当我把它粘贴到Greasemonkey脚本中时,它就不起作用了。如果我添加一些console.logs进行调试,我可以验证脚本是否正在运行,过滤器是否正常工作,但它没有修改CSS。有什么想法吗?有时您需要确保在加载页面后执行脚本
$(function(){
// YOUR CODE HERE
});
您也可以尝试使用setTimeout并放置2sec(2000)
由AJAX驱动的页面添加的内容通常在用户脚本运行很久之后添加,因此脚本通常不会看到它 如Kursion的回答所示,您可以使用固定的长时间间隔,但这有缺点:
setTimeout
最多只能捕获第一个实例。后续节点将丢失MutationObserver
s或类似的实用程序。两者都有优点和缺点,但我发现
waitForKeyElements
通常更简单、更健壮。(披露:是我写的。)
下面是一个完整的用户脚本,显示了在动态网页上使用的问题代码:
// ==UserScript==
// @name _Fix div CSS on AJAX-driven pages
// @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 ("div", adjustSelectDivdimensions);
function adjustSelectDivdimensions (jNode) {
if (jNode.css('width') == '648px') {
jNode.css( {"width": "900px", "height": "550px"} )
}
}
这很有效,谢谢!我的函数在映射初始化之前加载并运行,即使文档已准备就绪。通常情况下,等待固定的时间间隔不会给出可重复、可靠的结果(除非您将延迟设置为非常大、恼人的值)。有技术和这种东西。
// ==UserScript==
// @name _Fix div CSS on AJAX-driven pages
// @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 ("div", adjustSelectDivdimensions);
function adjustSelectDivdimensions (jNode) {
if (jNode.css('width') == '648px') {
jNode.css( {"width": "900px", "height": "550px"} )
}
}