2012-04-02 86 views
2

我一直在閱讀web並嘗試了幾天的嘗試,試圖通過jQuery移動轉換來展示Google Adsense廣告而不破壞ToS。我有點卡住了,所以我轉向最聰明的社區。通過使用jQuery移動頁面過渡加載AdSense廣告

Adsense標籤由三個腳本組成(i)通用標籤,(ii)插槽列表和(iii)顯示屏本身。前兩位進入<head>,後者位於<body>

我可以在我的第一頁上顯示廣告就好了。問題出現在頁面轉換。

由於jQuery Mobile沒有重新加載<head>,因此一個選項是在首次加載<head>時準備googletag。這將每個頁面的限制設置爲最多三個廣告,而整個網站的限制並不是很多。此外,這意味着你將不得不移動廣告<div>,這也不是很好。最後,這意味着您可以加載廣告並在用戶轉到其所屬的頁面之前不顯示廣告。哪個不是ToS兼容的。

有沒有辦法在每次轉換時加載新的新廣告?如果是,我會在哪裏放置Google腳本以確保它們正確加載?

回答

6

我找到了一種方法,讓它在AdSense插入DFP廣告管理系統中的Google DFP廣告管理系統中工作。 DFP更加靈活,因此更容易。

這是我使用的:

  • <head>:我把谷歌的腳本和定義的所有廣告位的整個網站(你將與「生成代碼」得到它)。
  • 在每個頁面上:您將腳本的<body>部分放在其他任何位置。

有了這個,您將可以在每次加載新頁面時獲得新的廣告。但是,如果您在頁面之間瀏覽,則永遠不會讓它們刷新。可以使用googletag.pubads().refresh()。但是,您只想刷新正在加載的頁面中的插槽,否則會破壞一些條款和條件。此外,您還不能顯示尚未顯示的refresh插槽,因此如果您爲整個網站定義了插槽,但所有頁面尚未加載完畢(很有可能),它將會失敗。

但是,您可以將當前頁面中的插槽傳遞給refresh()函數。這是我如何做的:

function refreshAds() { 
    // Get all the slots 
    var allSlots = googletag.pubads().getSlots(); 
    var slotsToRefresh = Array(); 
    // Select the slots that are on the current page based on their dom Id 
    for (var i=0; i<allslots.length; ++i) 
    if (isSlotIdOnTheCurrentPage(allSlots[i].getSlotId().getDomId())) 
     slotsToRefresh.push(allSlots[i]); // I let you implement the logic behind naming ids slots and divs 
    if (slotsToRefresh.length > 0) 
    googletag.pubads().refresh(slotsToRefresh); 
} 

$(document).on("pagechange", function() {refreshAds();}) 

你去那裏,每次回去頁面時,槽被刷新,每次你去到一個新的一頁,新插槽創建(只要它在<head>中定義)。

我希望它能幫上忙!可能有辦法讓它在AdSense中無縫工作,但我沒有嘗試。

+0

因此,您必須爲網站上顯示的每個廣告定義唯一的廣告位?一定是一個很小的網站? – Kevin 2012-06-14 20:00:09

+0

是的,這是一個web應用程序,因此只有很少的頁面呈現很多次。刷新廣告在這裏是一種生活節省。 – 2012-06-17 17:29:55

+0

這很棒。我以前甚至都不知道DFP廣告管理系統。不得不做幾個MOD來讓它爲我運行。必須在調用googletag.pubads()。refresh之前調用googletag.display一次。 – 2012-12-14 19:43:48

0

也許使用jQuery的getScript()方法將有助於這種情況。我建議你嘗試在pageinit函數中包含它。讓我舉個簡單的例子。

$(document).delegate('[data-role=page]','pageinit',function(){ // this would get executed on page init of every JQM page 
    $.getScript('path/to/yourlib.js',function(){ // using getScript should help you be able to load scripts since the head doesn't get loaded again 
     Demo(); //This would be code that your lib uses 
    }); 
}); 
+0

感謝您的回覆。您的解決方案可以執行該腳本,但插入'