Javascript 代码可以在控制台/草稿行中工作,但不能在Greasemonkey脚本中工作?

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进行调试,我可以验证脚本是否正在运行,过滤器是否正常工作

我正试着写一个脚本来放大地图

我已经让jQuery在Firefox草稿行中工作。这个脚本正是我想要完成的:

$('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"} )
        }
    }