3

2つのドロップダウンリストの外観を変更しています。ここでは問題ありません。すべてがうまく機能します。唯一の問題は、このaddEventListenerメソッドがページの更新時にのみ機能することです。

更新ボタンを押さずに、ページの読み込み時にこのコードを機能させるにはどうすればよいですか?

window.addEventListener('load', function () 
{
    var CityCount = this.character.citynum ;
    var PosX = parseInt(CityCount) * (-15);
    var MyHeight = parseInt(CityCount) * 15 - 15;
    var MyStyle='div#citylist {width: 150px !important; margin-top: ' + PosX + 'px !important; position: absolute !important; height: ' + MyHeight + 'px !important; overflow: auto !important; padding-left: 1px !important}';
    addGlobalStyle(MyStyle);
    addGlobalStyle('div#my_city_list {width: 150px !important; margin-top: 50px !important;}');
}, false)
4

1 に答える 1

1

ターゲットページをリストしていませんが、おそらくAJAXを使用してそのグローバル変数を設定または変更します。

さらに、スクリプトの@grant noneステータスが失われた場合、またはFirefox以外のブラウザでスクリプトを使用しようとすると、質問コードが壊れます。(スクリプトがインジェクションを使用している場合を除きます。これは質問からはわかりません。)

AJAXの問題を回避するには、内の変数をポーリングしますsetInterval()
コードをより堅牢にするには、unsafeWindowまたはスクリプトインジェクションを使用します。詳細については、「Greasemonkeyからの変数へのアクセス...」を参照してください。

すべてをまとめると、これは機能するはずです。 addEventListener()必要ありません:

var globScope       = unsafeWindow || window;
var cityCountTimer  = setInterval (styleTheCityList, 333);

function styleTheCityList () {
    this.lastCityCount  = this.lastCityCount || 0; // Static var for this func

    if (
            typeof globScope.character          != "undefined"
        &&  typeof globScope.character.citynum  != "undefined"
    ) {
        var CityCount  = parseInt (globScope.character.citynum, 10);
        if (CityCount !=  this.lastCityCount) {
            var PosX        = CityCount * (-15);
            var MyHeight    = CityCount * 15 - 15;
            var MyStyle     = 'div#citylist {width: 150px !important; margin-top: '
                            + PosX
                            + 'px !important; position: absolute !important; height: '
                            + MyHeight
                            + 'px !important; overflow: auto !important; padding-left: 1px !important}'
                            ;
            addGlobalStyle  (MyStyle);
            addGlobalStyle  ('div#my_city_list {width: 150px !important; margin-top: 50px !important;}');

            this.lastCityCount = CityCount;
        }
    }
}
于 2012-12-08T01:38:44.670 に答える