#html #iframe #shiny
#HTML #iframe #блестящий
Вопрос:
Это мой первый вопрос в StackOverflow. Пожалуйста, простите меня, если вопрос не представлен в надлежащем формате. У меня есть сохраненный HTML-виджет, созданный с помощью flowmapblue.R, который я хочу отобразить в документе Markdown Shiny. Я использую htmltools::tags $ iframe для включения HTML-файла в приложение Shiny. Файл хранится в каталоге www. Для вашей любезной справки я делюсь HTML-файлом по следующей ССЫЛКЕ. Код, который работает и дает желаемый результат, является:
---
title: "Flow Map"
author: "xyz"
date: "8/14/2020"
output: html_document
runtime: shiny
---
```{r flowmap, echo=FALSE, message=FALSE, warning=FALSE}
titlePanel("Mobility Flow Map")
mainPanel (htmltools::tags$iframe(src ="June_Spain.html", seamless="seamless", height=600, width="100%"))
```
Я получаю этот результат без использования renderUI.
Но на самом деле мой документ Markdown Shiny будет адаптивным, где пользователь может выбирать зоны и желаемые месяцы. На основе этих имен будет выбран соответствующий HTML-файл. Вот почему мне нужно использовать следующий фрагмент кода:
---
title: "Flow Map"
author: "xyz"
date: "8/14/2020"
output: html_document
runtime: shiny
---
```{r flowmap, echo=FALSE, message=FALSE, warning=FALSE}
titlePanel("Mobility Flow Map")
mainPanel(
htmlOutput("display_map")
)
output$display_map <- renderUI({
my_test <- htmltools::tags$iframe(src="June_Spain.html", seamless="seamless", height=600, width="100%")
my_test
})
```
В этом случае HTML-файл не найден, как показано в результате использования renderUI.
Я проверил несколько похожих проблем с renderUI () и htmlOutput (), но я не мог понять, где что-то идет не так. Мне отчаянно нужна ваша помощь в этом отношении. Заранее спасибо.
Ответ №1:
Странно. В качестве обходного пути вы можете закодировать HTML в строку base64:
b64 <- base64enc::dataURI(file = "www/June_Spain.html", mime = "text/html")
output$display_map <- renderUI({
htmltools::tags$iframe(src=b64, height=600, width="100%")
})
Комментарии:
1. Спасибо за ваше предложение. Я провел некоторое тестирование с вашим кодом и определил, что проблема не в функции tags $ iframe. Проблема связана с вызовом jQuery AJAX для конкретных HTML-файлов, которые я использую из flowmapblue.R. Предупреждающее сообщение [Устаревание] Синхронный XMLHttpRequest в главном потоке устарел из-за его пагубных последствий для работы конечного пользователя. Для перекрестной проверки, когда я пробовал мой предыдущий код и ваш код с помощью простого test.html в обоих случаях он отлично работает с тегами $ iframe. Теперь я пытаюсь исправить эту проблему. base64enc — это новое обучение. Спасибо.