Атрибуты href без кавычек заблокированы из-за асинхронной загрузки - PullRequest
0 голосов
/ 23 октября 2018

Я управляю статическим веб-сайтом с помощью инструмента поиска, который использует структуру терминов таксономии в качестве источника данных для поиска ссылок, соответствующих некоторым критериям, которые затем будут загружаться асинхронно и анализироваться для создания пользовательского интерфейса.

СтруктураТермины таксономии примерно такие:

<ul>
    <li data-term="TaxonomyTermOfFirstLevel">TaxonomyTermOfFirstLevel
        <ul>
            <li data-term="TaxonomyTermOfSecondLevel">TaxonomyTermOfSecondLevel
                <ul>
                    <li data-term="TaxonomyTerm">
                        <a href="https://www.example.com/some-page/">Some Page</a>
                    </li>
                </ul>
             </li>
         </ul>
      </li>
</ul>

И (фрагмент) процедуры загрузки:

var cache = {};

function load( url ) {

    if( ! cache[ url ] ) {
        cache[ url ] = $.ajax( url );
    }

    return cache[ url ];
}

С выводом HTML без минимизации все работает нормально.Но при минимизации с помощью экстремальных инструментов, которые также удаляют кавычки вокруг атрибутов, все запросы, сделанные на URL-адреса, найденные в структуре выше, завершаются с ошибкой:

Смешанное содержимое: страница в 'https://www.example.com/search/' был загружен через HTTPS, но запросил небезопасную конечную точку XMLHttpRequest 'http://www.example.com/some-page/'. Этот запрос был заблокирован;контент должен обслуживаться по протоколу HTTPS.

Как видите, и Requester (/search), и Requested (/some-page) находятся в одном домене, но браузер сообщает, что запрашиваемый URL-адреснебезопасно, потому что это не под SSL.Но если вы посмотрите на предоставленный мною фрагмент, у Запрошенного URL действительно есть префикс схемы https.

Я исчерпывающе искал об этом безуспешно и только когда деактивировал выводминимизация все вернулось в рабочее состояние.Затем я проанализировал все, что связано с процессом поиска, от HTML до каждого из файлов JS, отвечающих за поиск (в конце концов, это статический сайт), и я заметил только два отличия:

  • (очевидное)отсутствие кавычек вокруг атрибутов href.
  • Тот факт, что URL-адреса указывают на папки в корневом каталоге, каждая из которых имеет файл index.html (т.е. /same-page/index.html), вызывая перенаправление для псевдосодружественная-гиперссылка.Но, насколько я понимаю, это не было бы проблемой, поскольку jQuery прозрачно следовал бы за перенаправлением, верно?

Альтернатива, которая у меня была бы в этом случае, будет использовать другой минификатор, который не удаляетвместо кавычек tdewolff , встроенный выбор Hugo Static Site Generator, используемый для создания всех HTML-файлов.

Будет ли что-то еще, что мне не хватает?

1 Ответ

0 голосов
/ 30 октября 2018

Поскольку «Дружественные URL» на статическом сайте - это просто вложенные каталоги с файлом index.html, все запросы URL должны заканчиваться косой чертой - ИЛИ - указанный файл добавляется перед запросом с/ by AJAX.

Однако, как вы можете видеть в случае, описанном в этом разделе - подробно в этом репозитории тестирования - независимо от того, что все URL имеют трейлингкосая черта, в фоновом режиме, в какой-то момент процесса асинхронных запросов, эти завершающие косые черты удаляются, игнорируются или, учитывая тот факт, что используется минимизатор HTML, неправильно интерпретируются браузерами.

Для решенияВ этой проблеме я только добавил косую черту в URL, которые я бы запрашивал.Поскольку показанная выше функция-обертка load является очень общей, я не буду обходить ситуацию там, поскольку не все URL-адреса приведут к перенаправлению 301, поэтому вместо этого я применил исправление только после получения href атрибут:

var url = $( 'some selector' ).find( 'a' ).attr( 'href' ).replace( /\/?$/, '/' );

«Туз в лунке» - это функция replace, которая сохранит существующие косые черты без изменений, но добавит ту, где она отсутствует, будь онадля неправильно построенных тегов <a> или ошибочных удалений - как это, кажется, и происходит.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...