Как добавить JavaScript на каждую страницу без индекса в моем блоге Tumblr?

Я хочу добавить код JavaScript на каждую отдельную страницу в своем блоге Tumblr. У меня есть следующее, но оно, кажется, никогда не появляется на любой странице, не говоря уже о постоянной ссылке или отдельных страницах сообщений. Я пробовал много вариантов здесь, удалив блок Posts или блок PermalinkPage безрезультатно. Что я здесь делаю неправильно?

<!-- 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 -->

Ответы

Ответ 1

Вот как я мог бы решить это, используя 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
}

В принципе, если URL пути пуст или равен search, тогда не запускайте функцию, а запускайте ее в любом другом случае.

Однако, как я уже говорил, это не на 100% надежнее. Поскольку путь может быть http://your.tumblr.com/#, и функция будет терпеть неудачу, вам может потребоваться построить более явную логику (вы можете сказать, если path !== " " для пустой строки).

Я все еще не уверен, почему это не очень хорошая идея на каждой странице. Если пользователи определенно не связаны со страницами на сайте, которые не маршрутизируются через индексную страницу. И если ваш код JavaScript не массивный, все его можно кэшировать с индексной страницы (но все же доступны со всех других страниц в случае hotlinking и т.д.).

ИЗМЕНИТЬ

В соответствии с приведенными ниже комментариями я создал базовый пример тестовой учетной записи Tumblr.

Код выглядит следующим образом:

  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');
  }

Страница Tumblr, которую я использую, приведена здесь: http://sg-test.tumblr.com/

(Я не думаю, что есть страница поиска, функция поиска - это блок, который вы вставляете или активируете в своем шаблоне и доступен на каждой странице.)

Функция в основном проверяет индексную страницу (пустой первичный каталог) или страницу about (замените это для поиска или другой страницы, если это необходимо).

Журналы консоли будут выводиться на каждой странице. И если путь соответствует индексу или я установил цвет тела розовым, иначе каждая другая страница будет оранжевой.

http://sg-test.tumblr.com/about (розовый фон)

http://sg-test.tumblr.com/post/134796799695/post-title (оранжевый фон)

По этой логике должно быть легко адаптировать функцию для выполнения вашего кода, если она соответствует требованиям к переменной пути, как в моем первом примере.

Как я уже упоминал, есть проблема с http://sg-test.tumblr.com/#. Это фактически все еще страница индекса, но наш тест возвращает false для пустого каталога, хотя Tumblr сопоставляет его на домашней странице.

Ответ 2

Я запустил это в свой блог в песочнице, чтобы узнать, что может быть проблемой, и это лоб-slapper, когда я проверил консоль JS.

{block:Date},date:

Удалите запятую перед date, и она должна работать. Сообщите мне, есть ли у вас больше вопросов.