addEventListener работает только при обновлении страницы?
Я изменяю внешний вид двух выпадающих списков. Здесь нет проблем. Все отлично работает. Единственная проблема заключается в том, что 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)
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;
}
}
}