我试图将easyPrint plugin合并到我闪亮的传单应用中。我想要的是看似the demo的东西,但有光泽。
我试图模仿the examples,但一直没有成功。
到目前为止我的代码是我的R代码:
library(shiny)
library(shinydashboard)
library(shinyjs)
library(htmlwidgets)
library(htmltools)
library(leaflet)
library(leaflet.extras)
library(sp)
shinyApp(
ui = fluidPage(
leafletOutput("map", height = 750)
),
server = function(input, output) {
registerPlugin <- function(map, plugin) {
map$dependencies <- c(map$dependencies, list(plugin))
map
}
easyPrintPlugin <- htmlDependency("leaflet-easyprint", "2.1.8",
src = c(href = "https://github.com/rowanwins/leaflet-easyPrint/blob/gh-pages/dist/"),
script = "index.js")
# Map
output$map <- renderLeaflet({
leaflet() %>%
addProviderTiles(providers$CartoDB.Positron) %>%
registerPlugin(easyPrintPlugin) %>%
onRender("function(el, x) {
L.easyPrint({
position: 'topleft',
sizeModes: ['A4Portrait', 'A4Landscape']
}).addTo(map);}")
})
}
)
然而,一切都没有发生。它实际上是一个白色的屏幕。如果我删除了onRender部分,则传单正常。
不幸的是,我对Shiny,leaflet,.js和github相对较新,所以我很难确定导致问题的方面。
答案 0 :(得分:5)
library(leaflet)
library(shiny)
library(htmlwidgets)
jsfile <- "https://rawgit.com/rowanwins/leaflet-easyPrint/gh-pages/dist/bundle.js"
ui <- fluidPage(
tags$head(tags$script(src = jsfile)),
leafletOutput("map")
)
server <- function(input, output, session) {
output$map <- renderLeaflet({
leaflet() %>%
addProviderTiles("OpenStreetMap.Mapnik") %>%
setView(-122.23, 37.75, zoom = 10) %>%
onRender(
"function(el, x) {
L.easyPrint({
sizeModes: ['Current', 'A4Landscape', 'A4Portrait'],
filename: 'mymap',
exportOnly: true,
hideControlContainer: true
}).addTo(this);
}"
)
})
}
shinyApp(ui, server)
注意:leaflet-easyPrint取决于dom-to-image
。根据{{3}},不支持Safari和Internet Explorer。但是,打印按钮可以在Chrome和Firefox中使用。
如果我们运行app并检查元素,我们会看到以下错误:
让我们从第二个和第三个错误开始。
无法加载资源
此错误非常明显:URL 不存在。路径错误:index.js
目录中不存在dist
。
我们希望bundle.js
使用此路径:https://github.com/rowanwins/leaflet-easyPrint/blob/gh-pages/dist//index.js。
未加载脚本
GitHub使用严格的MIME类型检查,因此浏览器没有按预期使用该文件。我们需要使用https://github.com/rowanwins/leaflet-easyPrint/blob/gh-pages/dist/bundle.js路径。阅读更多rawgit.com。要编写rawgit.com路径,请按照以下步骤(从链接的答案):
- 在GitHub上找到您的链接,然后点击&#34; Raw&#34;该文件的版本。
- 复制网址,然后链接到该网址。
- 将raw.githubusercontent.com更改为rawgit.com(非生产)或cdn.rawgit.com(生产)
醇>
我们应该使用此路径:here
TypeError:L.easyPrint不是函数
在加载leaflet-easyPrint
的错误之前发生错误。这告诉我们onRender
在加载leaflet-easyPrint
并附加到窗口小部件之前被调用。每https://rawgit.com/rowanwins/leaflet-easyPrint/gh-pages/dist/bundle.js,运行时的htmldependency注入可以是异步的。他建议不要将htmlDependency(src = c(href = "http://..."))
用于任何与Shiny一起使用的依赖项。
相反,我们可以在Joe Cheng in this thread中包含远程JS文件。然后在调用leaflet-easyPrint
之前加载onRender
。