Nie mam konta Google AdSense, więc nie mogę tego przetestować. Jest tu jednak kilka poważnych problemów:
- Nie można dołączyć znacznika
<script>
do szablonu kierownicy, nawet jeśli używa się CDATA.
- Google AdSense wymaga, aby kod JavaScript AdSense był wyświetlany dosłownie na Twojej stronie lub jest naruszeniem TOS.
- Zgodnie z this StackOverflow answer witryna AdSense w AJAX jest obecnie słabo obsługiwana.
- 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.
To nie działa. Znacznik skryptu jest wstawiany we właściwym elemencie div, ale nie wystarcza, aby go załadować. – Johan
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
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