2016-02-17 2 views
0

Этот javascript работает совместно с php, чтобы показывать объявление пользователю, когда он пытается покинуть страницу (неприятная функциональность, которую я знаю .. Не мой выбор).Firefox Onunload After Onbeforeload

Нужный порядок событий, когда пользователь пытается покидающим это:
1. Onbeforeunload: Показать объявление - The Ad before choice
2. а. Если они уходят: Ничего
        b. Если они останутся: вызовите adDisplayed(), чтобы отметить в db, что пользователь остался.
3. Если они нажимают на объявление, другая функция отмечает, что они нажали.

Это работает в Chrome и IE, но в Firefox «2. a». никогда не бывает. Вместо этого «2. b.» происходит независимо от того, остаются ли они или уезжают.
Функция onunload успешно предотвращает фактическое выполнение adDisplayed(), если они уходят, за исключением Firefox.

var markSeen = 0; 

function regularChatDisplay(e) { 
    //This is called just before the page unloads  
    if(validNavigation == false && windowInteraction == true){ 
     isDone = true; 
     window.onbeforeunload = null; 
     window.pagehide = null; 

     showAd();  
     AdHasDisplayed = 1; 

     //Setting this on a timout enables us to execute this only if the user stays         
     markSeen = setTimeout("adDisplayed();", 800);   
     return "Wait! Want to see other offers you may be interested in? Please stay to see an additional offer.";   
    }  
} 
function noTimeout() { 
    //This prevents adDisplayed() if the user leaves instead of staying when presented with the dialogue box 
    clearTimeout(markSeen); 
}    

function setOnBeforeUnloadEvent() {      
    if (!isDone) {          
     window.onbeforeunload = regularChatDisplay;  
     window.pagehide = regularChatDisplay;  
     window.onunload = noTimeout; 
    }  
} 
function adDisplayed(){ 
    //Placing something here will cause it to be executed after the user chooses to stay on the page after having been prompted 
    $("#seenSpan").load('pages/adSeen.php');  
}       
setOnBeforeUnloadEvent(); 

Я работал над этим на некоторое время теперь, и я посмотрел всего за ответы, так что любая помощь будет удивительным. Благодаря!

+0

'noTimeout', похоже, вызывает clearTimeout с неопределенным параметром. Определяет ли определение 'markseen' вне' regularChatDisplay' что-нибудь? – traktor53

+0

Спасибо, я только что увидел это. Это не помогает. Также fyi функция onunload определенно вызывается, но похоже, что ее не всегда вызывают раньше, чем выполняется таймаут. – Lucas

ответ

0

Я нашел обходное решение. Это не идеально, но это работает:

function regularChatDisplay(e) {  
    //This is called just before the page unloads  
    if(validNavigation == false && windowInteraction == true){ 
     isDone = true; 
     window.onbeforeunload = null; 
     window.pagehide = null; 

     showAd();  
     AdHasDisplayed = 1; 

     //Setting this on a timout enables us to execute this only if the user stays 
     if(browserType != "Firefox"){ 
      markSeen = setTimeout("adDisplayed();", 800); 
     } 
     else{ 
      window.onbeforeunload = adDisplayed;  
     }              
     return "Wait! Want to see other offers you may be interested in? Please stay to see an additional offer.";   
    }  
} 

Недостатком является то, что он на самом деле не стрелять в то время как вы решили остаться, но так как это срабатывает, если вы уйдете, он все еще работает.

Я собираюсь оставить это на случай, если это поможет кому-либо еще.

Смежные вопросы