У меня есть работающее приложение 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>
Ты можешь сделать
tags$html(class = "no-js", lang = "en")
Я не использую ShinyDashboard, но я думаю, что вы должны поместить этот код в dashboardBody
.
@ryadden Я не понимаю, что ты имеешь в виду. Я попробовал, и он помещает атрибуты в тег html
в начале документа, сразу после DOCTYPE. Почему вы говорите «в теле»?
Возьмем самое простое приложение 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];jquery[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 Это недопустимый пользовательский интерфейс (я удивлен, что он работает). Попробуйте ui <- fluidPage(tags$html(lang = "en"))
.
Возможно, я делаю что-то не так, но когда я запускаю следующие строки: 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 А, ты прав, вот что происходит, когда ты нажимаешь CTRL+U. Но откройте консоль (CTRL+Shift+I в Chrome) и осмотрите элементы, вы увидите, что тег <html lang = "en">
находится вверху. Это Javascript, который перемещает его.
о, правда. По-видимому, исходные коды выглядят по-разному, если вы открываете их в новом окне (с помощью CTRL-U или щелкните правой кнопкой мыши, а затем «Просмотреть исходный код») или если вы просматриваете их в консоли (т.е. проверяете элементы). В последнем случае он находится вверху, поэтому я думаю, что автоматические просмотрщики веб-страниц (для слепых) смогут использовать атрибут языка. Спасибо за помощь, Стефан.
Вы можете использовать тег head
, чтобы включить что-либо в обычный HTML <head></head>
.
ui <- fluidPage(
tags$head(HTML("<html lang='en'>"))
)
Да, он помещает атрибут в тег html, но в тело кода, который все еще может пройти тест на «соответствие доступности». Мне все еще было бы любопытно узнать, возможно ли вообще поместить атрибут в самый внешний (который идет сразу после <!DOCTYPE html> и заключает в себе весь исходный код) html-тег - потому что именно здесь auto-web -page-readers (для слепых) устанавливает свойство языка для всей веб-страницы.