2013-04-09 6 views
7

Jaki jest właściwy sposób umieszczania banera Google AdSense w szablonie Ember (Handlebars)? Say mam szablon dla widoku, który wygląda tak:Szablon Ember i Google AdSense

<script type="text/x-handlebars" data-template-name="myPageWithBanner"> 
    <div id="mainContent"> 
    Lorem ipsum main content 
    </div> 
    <div id="banner"> 
    //Normally I would insert a script tag here, but that is not possible 
    </div> 
</script> 

muszę zrobić to z kodu przy użyciu wstępnie skompilowane szablony, czy jest jakiś sposób, że nie jestem świadomy?

Odpowiedz

3

Nie mam konta Google AdSense, więc nie mogę tego przetestować. Jest tu jednak kilka poważnych problemów:

  1. Nie można dołączyć znacznika <script> do szablonu kierownicy, nawet jeśli używa się CDATA.
  2. Google AdSense wymaga, aby kod JavaScript AdSense był wyświetlany dosłownie na Twojej stronie lub jest naruszeniem TOS.
  3. Zgodnie z this StackOverflow answer witryna AdSense w AJAX jest obecnie słabo obsługiwana.
  4. Przeszukiwacz Google AdSense nie będzie widział żadnej treści na Twojej stronie, więc wątpię, czy będzie to działało. Ale zobacz poniżej kilka rzeczy, które mogą pomóc robotom.

Ale dla uproszczenia zakładam, że możesz omawiać problemy z TOS bezpośrednio z Google, a ja postaram się rozwiązać problemy techniczne. Po pierwsze, na podstawie this StackOverflow answer, oto jedno możliwe rozwiązanie, które pozwala na służyć do skryptu Google dosłownie:

<script type="text/x-handlebars"> 
    <h1>Ember AdSense</h1> 
    {{outlet}} 
    <div id="ads"></div> 
</script> 

<script type="text/x-handlebars" data-template-name="index"> 
    <p>Hello, world!</p> 
</script> 

<div id="ads-load" style="display: none"> 

<!-- 
    Apparently this needs to appear verbatim, exactly as Google gave it to 
    you, or it's a TOS violation. 
--> 

<script type="text/javascript"><!-- 
google_ad_client = "ca-pub-XXXXXXXXXX"; 
/* Test Ad */ 
google_ad_slot = "XXXXXX"; 
google_ad_width = 250; 
google_ad_height = 250; 
//--> 
</script> 
<script type="text/javascript" 
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> 
</script> 

</div> 

Potem, gdy nasze główne ładunki szablon, możemy użyć jQuery przenieść reklamy do naszego szablonu aplikacji:

window.App = Ember.Application.create(); 

// Explicitly declare the view class for our application view. 
App.ApplicationView = Ember.View.extend({ 
    // Called once the view is rendered. 
    didInsertElement: function() { 
     $('#ads-load').appendTo("#ads").css("display", "block"); 
    } 
}); 

Jeśli chodzi o zezwolenie robotowi Google na dostęp do Twojej zawartości, Google ma numer official advice for AJAX applications, ale I don't know whether that works with the AdSense crawler. Ewentualnie, jeśli używasz pushState do aktualizacji wyświetlanych adresów URL, musisz upewnić się, że każdy z tych adresów URL może zostać wyrenderowany przez serwer na żądanie przeszukiwacza. (Dyskusyjne oprogramowanie forum does exactly this.)

Proszę dać mi znać, jeśli zbliży się do ciebie.

+0

To nie działa. Znacznik skryptu jest wstawiany we właściwym elemencie div, ale nie wystarcza, aby go załadować. – Johan

+0

Właśnie zaktualizowałem go o nowy kod oparty na innej odpowiedzi StackOverflow. Czy to ci się bardziej zbliża? Pamiętaj też, że AdSense nie będzie w stanie zobaczyć Twojej zawartości strony. Oto kilka sugerowanych rozwiązań: http://stackoverflow.com/questions/10834751/adsense-with-ajax – emk

+0

Właściwie uważam, że pozwolę, aby reklama AdSense była w divie, który nie jest obsługiwany przez Ember (tj. Statyczny) . To powstrzyma mnie przed naruszeniem TOS i pozbyciem się problemu dynamicznego dodawania banera. Wierzę, że twoja odpowiedź będzie właściwa dla innych przypadków użycia, więc dam ci kredyt na odpowiedź. – Johan