2014-03-31 24 views
3

我有一個使用laravel創建的網站。我希望用戶在第一次訪問我的網站時能看到一個彈出窗口。只顯示一次在整個網站的導航中彈出一次

第一次我的意思是,用戶來到我網站上的任何頁面(這是第一次),訪問網站上的一些鏈接頁面(現在,這些頁面訪問不是第一次),在facebook相同的選項卡(從而離開我的網站),然後再次在同一個選項卡中打開我的網站(這是第一次)。

一次彈出背後的根本原因是在他瀏覽網站時不會一次又一次地打擾用戶。但是,一旦他離開並再次回來,那麼我想把它當作新的訪問(並再次顯示彈出窗口)。

我知道我可以用setTimeout()jQuery做彈出的東西。但如何做一次?請注意,彈出窗口可以顯示在任何頁面上(如果它是當前訪問的第一頁),而不僅僅顯示在主頁上。

回答

2

你可以使用document.referrer,並檢查前一頁是否是你的域名之一。但並非所有訪問者/瀏覽器都會因安全原因返回此值。

所以這是不可靠的。

+0

'document.referrer'爲我工作。 – halkujabra

2

使用插件像jQuery Cookie,然後簡單地做:

if(!$.cookie("popup")) 
{ 
your_popup_function(); 
$.cookie("popup",true); 
} 

編輯:既然你編輯的關於你的「第一次訪問」定義你的問題,我建議的方法沃爾特品牌建議使用引用。取自this post

document.referrer.indexOf(location.protocol + "//" + location.host) === 0; 
+1

我想用餅乾的問題是,會話cookie仍然是可用的,當您導航到另一個網站,然後回來在同一個標​​籤。 –

+0

你是對的,編輯我的答案。 –

2

解決方案,而無需使用插件:

var adCookie = document.cookie.indexOf('ad_displayed') 

if (adCookie != -1) { 
    your_popup_function(); 
    document.cookie = "ad_displayed=1"; 
} 

這是想法,當然你也可以設置Cookie的到期日期。閱讀更多here

+1

您無法知道訪客何時離開您的網站,並在稍後使用Cookie回到同一個標籤。所以在這種情況下,這個答案是沒有用的。 –

+0

如果您希望獲得最高性能和最小代碼大小,則此cookie解決方案對我來說是可取的。 –

1

您好,我在解決客戶需求時做了這個解決方案「在導航到網站的不同頁面時只顯示一次彈出窗口」,它對我很有用。 我做了它使用cookie,並設置cookie的cookie的創建時間的價值比我使用javascript setInterval函數與當前時間的cookie值的差異,並比較差異與我想顯示的彈出時間和是工作。

$(document).ready(function() 
{ 
var myVar=""; 

function getCookie(name) 
{ 
var re = new RegExp(name + "=([^;]+)"); 
var value = re.exec(document.cookie); 
return (value != null) ? unescape(value[1]) : null; 
} 

function callagain() 
      { 
      if(!getCookie("magazine")) 
      { 
       var c1= new Date(); 
       var c2=c1.getTime(); 
       document.cookie="magazine="+c2; 
       } 
      var cvalue= getCookie("magazine"); 
      var cvalue2=parseInt(cvalue); 
      myVar=setInterval(function(){ call22(cvalue2);},1000);  
     } 

function call22(abcd) 
{ 
var curdate = new Date(); 
var curtime = curdate.getTime(); 
var curtime2=parseInt(curtime); 
var result=curtime2 - abcd; 
if((result >30000) && (result < 31000)) 
      { 
       alert(「POP UP ONCE THROUGHOUT THE SITE」); 
       clearInterval(myVar); 
      } 
} 
callagain();     
});