Greasemonkey:当style =“display:none;”时如何做某事变化?

时间:2015-03-15 00:09:49

标签: javascript jquery css greasemonkey

我已经尝试过attrchange,waitForKeyElements和MutationObserver,但是没有一个能用于我正在尝试做的事情(或者我不太了解它们让它们工作lol)所以经过5个小时的尝试来解决这个问题,我放弃了。

在我播放的网站上的迷你游戏中,最后页面顶部的消息显示您是赢还是输。 “再次播放”按钮位于您完成游戏的页面底部。如果没有向上滚动,我看不到输入/输掉的消息,所以我想将这条消息克隆到屏幕上,如下所示:

$( ".alert alert-success" ).clone().prepend( "#play_again" );
$( ".alert alert-danger" ).clone().prepend( "#play_again" );

$( "#winning" ).clone().prepend( "#play_again" );
$( "#loss" ).clone().prepend( "#play_again" );

html看起来像:

<div class="col-md-9">

    <div id="winning" class="col-md-9 col-md-offset-1" style="display: none;">
        <div class="alert alert-success"> … </div>
    </div>
    <div id="loss" class="col-md-9 col-md-offset-1" style="display: none;">
        <div class="alert alert-danger"> … </div>
    </div>

赛后:

<div id="loss" class="col-md-9 col-md-offset-1" style="">
    <div class="alert alert-danger"> … </div>

我的脚本运行得太快,我找不到任何用于waitForKeyElements的元素。我找不到在样式更改上运行waitForKeyElements的方法,当我尝试时,我得到一个静默脚本失败。

在隐藏之前进行克隆或移动无效......

如何在'样式'更改后让我的脚本运行?最好不要进行民意调查,因为我的电脑最近表现得很懦弱...有点像事件听众,但对于CSS来说。

谢谢!

1 个答案:

答案 0 :(得分:2)

这个 plugin 很容易使用,因为我不是非常专业的油脂猴,但我试图帮助,无论如何,它的工作原理,你可以在属性改变时调用一些动作例如display attr。

这是一个简单的例子:

$('#foo').styleListener({

    // the styles that you want to monitor for changes
    styles: ['visibility', 'width', 'height', 'color', 'font-size'],

    // function to be called when a monitored style changes 
    changed: function(style, newValue, oldValue, element) {
        alert(style + ' changed from ' + oldValue + ' to ' + newValue);
    }

});

修改

我们可以使用事件监听器和事件“DOMAttrModified”,可以找到更多信息 here

修改2

这个plugin使用 MutationObserver ,我认为这是一个很好的解决方案,间隔只用于旧的IE浏览器(猜测这不是一个大问题),找到示例 here