Как установить атрибуты основного тега <html> (в верхней части исходного кода) для приложения Shiny

У меня есть работающее приложение R Shiny, но для того, чтобы соответствовать требованиям доступности (например, чтобы читатели веб-страниц для слепых могли работать с целевой страницей), атрибут языка (lang = "en") должен быть установлен в основном теге html, т.е. : <!doctype html> <html lang = "en"> <head>.....

У меня есть код ui.R, начинающийся с функции dashboardPage(), но если я поставлю, например. HTML("<html lang='en'>") в любой из своих аргументов — полученный исходный код приложения будет отображать эту строку в теле (созданную dashboardBody()), а мне нужно в самом верхнем теге <html> (предположительно созданном самим блестящим пакетом при рендеринге пользовательского интерфейса приложения).

Вот что я получаю (при просмотре исходного html-кода рабочего блестящего приложения:

<!DOCTYPE html>
<html>
<head>

Хотя то, что мне нужно, выглядит следующим образом:

<!DOCTYPE html> 
<html class = "no-js" lang = "en"> 
<head>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
4
0
266
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ты можешь сделать

tags$html(class = "no-js", lang = "en")

Я не использую ShinyDashboard, но я думаю, что вы должны поместить этот код в dashboardBody.

Да, он помещает атрибут в тег html, но в тело кода, который все еще может пройти тест на «соответствие доступности». Мне все еще было бы любопытно узнать, возможно ли вообще поместить атрибут в самый внешний (который идет сразу после <!DOCTYPE html> и заключает в себе весь исходный код) html-тег - потому что именно здесь auto-web -page-readers (для слепых) устанавливает свойство языка для всей веб-страницы.

ryadden 29.05.2019 17:30

@ryadden Я не понимаю, что ты имеешь в виду. Я попробовал, и он помещает атрибуты в тег html в начале документа, сразу после DOCTYPE. Почему вы говорите «в теле»?

Stéphane Laurent 29.05.2019 18:04

Возьмем самое простое приложение Shiny: UI.R: tags$html( lang = "en") server.R: function(input, output) {} Если вы запустите его и нажмете Просмотреть исходный код страницы - исходный код будет выглядеть так: следующее: <!DOCTYPE html> <html> <head> <script type = "application/html-dependencies">json2[2014.02.04];jquer‌​y[1.12.4];shiny[1.1.‌​0] </script> <link href = "shared/shiny.css" rel = "stylesheet" /> <script src = "shared/shiny.min.js"></script> </head> <body> <html lang = "ru"></html> </body> </html>. нужная строка отображается внутри части <body>, в то время как вторая строка по-прежнему читается как <html>

ryadden 29.05.2019 18:50

@ryadden Это недопустимый пользовательский интерфейс (я удивлен, что он работает). Попробуйте ui <- fluidPage(tags$html(lang = "en")).

Stéphane Laurent 29.05.2019 19:19

Возможно, я делаю что-то не так, но когда я запускаю следующие строки: library(shiny) ui <-fluidPage(tags$html(lang = "en")) server <- function(input, output, session) { }shinyApp (ui, server) и нажимаю CTRL-U в открывшемся окне браузера (чтобы увидеть исходный код) - получаю: <!DOCTYPE html> <html> <head> в самом верху и </head> <body> <div class = "container-fluid"> <html lang = "en"></html> </div> </body> </html> в нижней части исходного кода (поэтому добавление FluidPage() добавляет только элемент div ( class='container-fluid') вокруг нашего тега html (с установленным атрибутом)

ryadden 29.05.2019 19:46

@ryadden А, ты прав, вот что происходит, когда ты нажимаешь CTRL+U. Но откройте консоль (CTRL+Shift+I в Chrome) и осмотрите элементы, вы увидите, что тег <html lang = "en"> находится вверху. Это Javascript, который перемещает его.

Stéphane Laurent 29.05.2019 20:07

о, правда. По-видимому, исходные коды выглядят по-разному, если вы открываете их в новом окне (с помощью CTRL-U или щелкните правой кнопкой мыши, а затем «Просмотреть исходный код») или если вы просматриваете их в консоли (т.е. проверяете элементы). В последнем случае он находится вверху, поэтому я думаю, что автоматические просмотрщики веб-страниц (для слепых) смогут использовать атрибут языка. Спасибо за помощь, Стефан.

ryadden 30.05.2019 15:11

Вы можете использовать тег head, чтобы включить что-либо в обычный HTML <head></head>.

ui <- fluidPage(
  tags$head(HTML("<html lang='en'>"))
)

Другие вопросы по теме