2016-08-08 11 views
14

Chcę dodać kod JavaScript do każdej pojedynczej strony posta na moim blogu Tumblr. Mam następujące, ale wydaje się nigdy nie pojawiać na żadnej stronie, a tym samym tylko permalink lub poszczególnych stron postu. Próbowałem wiele wariacji tutaj, usuwając blok 10 lub blokPermalinkPage bezskutecznie. Co ja tu robię źle?Jak dodać JavaScript do każdej strony bez indeksu na moim blogu Tumblr?

<!-- Start JS --> 
{block:Posts} 
    {block:PermalinkPage} 
    <script type='text/javascript'> 
    __config = { 
      {block:Date},date:'{Year}-{MonthNumberWithZero}-{DayOfMonthWithZero} {24HourWithZero}:{Minutes}:{Seconds}'{/block:Date} 
      {block:PostSummary},title:{JSPlaintextPostSummary}{/block:PostSummary} 
      {block:HasTags},tags:[{block:Tags}'{Tag}', {/block:Tags}],{/block:HasTags} 
      ,url:'{URLEncodedPermalink}' 
    }; 
    (function(){ 
     var s = document.createElement('script'); 
     s.type = 'text/javascript'; 
     s.src = document.location.protocol + '//example.com/example.js'; 
     (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(s); 
    })(); 
    </script> 
    {/block:PermalinkPage} 
{/block:Posts} 
<!-- END JS --> 
+0

Dlaczego nie wystarczy dodać javascript do każdej strony? Zostanie on zbuforowany następnie co najmniej – lharby

+0

, ponieważ aplikacja JavaScript nie powinna być uruchamiana na głównej stronie foo.tumblr.com. Powinien wystrzelić na adres foo.tumblr.com/EveryPageButSearch –

+0

. Zobacz: http://ejdraper.com/2009/12/13/advanced-tumblr-customization/ (nieco ponad pół drogi). Mylnie strona index_grupy Tumblr odnosi się do różnych typów stron indeksu. Możesz kierować reklamy na stronę wyszukiwania przy użyciu tagów tumblr, ale pominięcie kodu jest bardziej złożone. Znam sposób, aby rozwiązać ten problem za pomocą jquery (który moim zdaniem mógłby zostać przeniesiony do jilli vanilla), ale oczywiście jest bardziej hackowaty i nie tak mocny, jak ustawienie go w tagach tumblr). – lharby

Odpowiedz

9

W ten sposób mogę rozwiązać problem za pomocą JavaScript/front end.

var path = document.location.pathname; 
path = path.split("/")[1]; // Should return the primary directory 
path = path.toLowerCase(); // This should catch your.tumblr.com/Search and your.tumblr.com/search 
if(path === "" || path === "search")){ 
    console.log('Index or Search page'); 
}else{ 
    // Run your function here 
} 

Zasadniczo jeśli URL ścieżka jest pusta lub jest równa search wtedy nie uruchomić funkcję, ale uruchomić funkcję w każdym innym przypadku.

Jednak, jak już wspomniałem, nie jest to w 100% niezawodne. Ponieważ ścieżka może być http://your.tumblr.com/#, a funkcja się nie powiedzie, być może będziesz musiał zbudować bardziej wyraźną logikę (możesz powiedzieć, jeśli path !== " " dla pustego łańcucha).

Nadal nie jestem pewien, dlaczego nie jest to dobry pomysł na każdej stronie. Chyba, że ​​użytkownicy są zdecydowanie powiązani ze stronami w witrynie i nie są przekierowywani przez stronę indeksu. A jeśli twój kod JavaScript nie jest duży, to wszystkie mogą być buforowane ze strony indeksu (ale nadal dostępne ze wszystkich innych stron w przypadku hotlinków itp.).

EDIT

Zgodnie komentarzach poniżej, stworzyły podstawowy przykład na koncie testowym Tumblr.

Kod wygląda następująco:

var path = document.location.pathname; 
    path = path.split("/")[1]; 
    path = path.toLowerCase(); 
    if(path === "" || path === "about"){ 
    $('body').css('background','#F09'); 
    console.log('Index or about page'); 
    }else{ 
    $('body').css('background','#FC0'); 
    console.log('Other page'); 
    } 

strona Tumblr używam jest tutaj: http://sg-test.tumblr.com/

(nie sądzę, istnieje strona wyszukiwania, funkcja wyszukiwania jest blok włożeniu lub aktywuj w swoim szablonie i jest dostępny na każdej stronie.)

Funkcja w zasadzie sprawdza stronę indeksu (pusty katalog główny) lub stronę o tym (zastąp to dla "wyszukiwania" lub innej strony, jeśli zajdzie taka potrzeba).

Logi konsoli będą wyświetlane na każdej stronie. A jeśli ścieżka pasuje do indeksu lub o, ustawiłem kolor nadwozia na różowy, inaczej każda inna strona będzie pomarańczowa.

http://sg-test.tumblr.com/about (różowe tło)

http://sg-test.tumblr.com/post/134796799695/post-title (pomarańczowe tło)

Według tej logiki powinny być łatwe do dostosowania funkcji do wykonania kodu, jeżeli spełnia wymagania zmiennej PATH, jak w moim pierwszym przykładzie .

Jak już wspomniałem, jest problem z http://sg-test.tumblr.com/#. To jest w rzeczywistości nadal strona indeksu, ale nasz test zwraca false dla pustego katalogu, mimo że Tumblr odwzorowuje go na stronie głównej.

+0

Nie mam nic przeciwko buforowaniu go ze strony indeksu. Po prostu nie chcę, aby JS wystrzeliło na indeks lub strony wyszukiwania. W przypadkach, o których mówię, użytkownicy są zdecydowanie powiązani z poszczególnymi stronami postów. Czy to możliwe z tagami Tumblr, jeśli jest na każdej stronie, ale nie strzela? –

+1

Brak tagów tumblr wyłącznie dla strony głównej (chociaż istnieje tag dla strony wyszukiwania), ponieważ ogólnie szablon jest jednym blokiem kodu dla całej witryny. Proponowane przeze mnie rozwiązanie będzie działało na każdej stronie, ale tylko wykona funkcję, jeśli spełnia kryteria nie będące indeksem lub stroną wyszukiwania. Czy pomogłoby, gdybym zrobił przykład? – lharby

+0

Nie mogę uzyskać kodu do pracy na żadnej innej stronie oprócz strony głównej. Przykład byłby bardzo pomocny. Konsola console.log() nawet nie uruchamia się na stronie głównej. –

-3

Wepchnąłem to na mój blog w piaskownicy, aby zobaczyć, jaki może być problem, i to jest klaps na czole, kiedy sprawdziłem konsolę JS.

{block:Date},date: 

Usuń przecinek przed date i powinno działać. Daj mi znać, jeśli masz więcej pytań.

+0

Próbowałem sparować parę pól, aby dołączyć tylko * adres * i nadal nie działało. –

+0

Czy sprawdzasz stronę i pewien tag skryptu nie jest w ogóle wstawiany? Czy są jakieś błędy w konsoli JS dla tego obszaru kodu? Ponieważ po usunięciu przecinka z przed daty, wstawił on znacznik skryptu. – Ally

+0

Tak, mam otwartą przeglądarkę do strony postu w osobnym oknie i zapisuję moje zmiany i wychodzę z edytora, aby mieć 100% pewności i nadal nie widzę JS. Spojrzałem na posty i obrazy (foo.tumblr.com/image/123) i nie widzę JS. –

Powiązane problemy