Reputation: 161
I have a script in (using wordpress) header.php which looks like this:
window.addEventListener("DOMContentLoaded", function(event) {
fixedMenu.init("header-container", 0);
fixedMenu.init("event-type-wrapper", 20);
window.addEventListener('scroll', function(fid){
fixedMenu.top("header-container");
fixedMenu.top("event-type-wrapper");
});
var sessionvar = "<?php echo $_SESSION['lang'] ?>";
});
after this script I include a longer one script with the script scr="" tag.
In that script I have
window.addEventListener("DOMContentLoaded", function(event) {
todays = document.getElementById("todays-events");
upcomming = document.getElementById("upcomming-events");
past = document.getElementById("past-events");
texter = document.getElementById("event-type");
changeMessage();
});
It works fine in any webkit browser, the code is launched, but firefox doesn't load second event listener (I do not know how to debug if it loads or not, but I don't see result in the webpage).
Any ideas?
UPDATE
If there is need, here is the full source for the script embedded through script src=
var todays;
var upcomming;
var past;
var texter;
window.addEventListener("DOMContentLoaded", function(event) {
todays = document.getElementById("todays-events");
upcomming = document.getElementById("upcomming-events");
past = document.getElementById("past-events");
texter = document.getElementById("event-type");
changeMessage();
});
window.onscroll = function(){
changeMessage();
}
function isElementInViewport (el) {
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= document.body.scrollHeight &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}
function changeMessage(){
if(texter && todays && isElementInViewport(todays)){
texter.textContent = returnString("Šiandien", "Today", "Сегодня");
}
else {
if(texter && upcomming && isElementInViewport(upcomming)){
texter.textContent = returnString("Artėjantys","Upcomming","Предстоящие");
}
else{
if(texter && past && isElementInViewport(past)){
texter.textContent = returnString("Praėję", "Past", "Прошлое");
}
}
}
}
function returnString(lt, en, ru){
if (!(typeof sessionvar === 'undefined')) {
if(sessionvar == 'en_EN'){
return en;
}
else if(sessionvar == 'ru_RU'){
return ru;
}
}
return lt;
}
Upvotes: 0
Views: 104
Reputation: 161
The problem was that firefox reports
document.body.scrollHeight
as 0, because of that every if
inside changeMessage()
failed by returning false.
The solution was found in SO: .body.scrollHeight doesn't work in Firefox
quote:
function getDocHeight() {
var D = document;
return Math.max(
Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
Math.max(D.body.clientHeight, D.documentElement.clientHeight)
);
}
Upvotes: 1
Reputation: 118
I think that what is not working is the code inside changeMessage function, because Firefox doesn't understand element.innerText, and you have to change to element.textContent
Upvotes: 0