获取 ImpactStory JavaScript 小部件渲染到 R Shiny 应用程序中的表格单元格

Getting ImpactStory JavaScript widgets rendered to a table cell in an R Shiny app

本文关键字:应用程序 Shiny 单元格 表格 JavaScript ImpactStory 小部 获取      更新时间:2023-09-26

[这个问题昨天也发布到 https://groups.google.com/d/msg/shiny-discuss/1UmzvZJwM54/gdMmX7QQ-eIJ,到目前为止还没有答案]

我一直在开发一个 Shiny 应用程序,它以表格和 rCharts (NVD3) 的形式显示一些期刊文章的一些原始替代数据 http://spark.rstudio.com/ttso/alt/

我的代码与示例数据 https://gist.github.com/tts/6990101

到目前为止一切顺利,但现在我在尝试将 JavaScript 小部件包含在表中时遇到了困难 http://impactstory.org/api-docs 这样的小部件工作得很好,就像在这个 HTML 示例中一样 http://users.tkk.fi/sonkkila/alt/arts.html - 但在我的 Shiny 表中,它们应该出现的最后一列 (IS) 是空的。

当我离开桌子时,我可以看到HTML代码在那里 - 但是当消毒时,它消失了。服务器中的呈现表代码。R: https://gist.github.com/tts/6990101#file-server-r-L69-L85

从HTML源代码中,我还可以看到ImpactStory脚本应该位于页面顶部。

欢迎所有指针!

免责声明:虽然我已经玩R和Shiny一段时间了,但我认为自己真的是一个JavaScript/CSS新手,所以我可能在这里错过了一些明显的东西。

编辑:只是为了澄清:当然,经过净化的HTML代码在这一点上消失了,因为没有文本元素值。我想知道 a) 不同的 JS 脚本之间是否存在冲突,也许它们需要以不同的顺序出现(必须询问 ImpactStory )或 b) xtable() 如何生成输出存在一些问题或 c) Shiny 不知道如何与 impactstory.js 脚本进行通信或 d) Shiny 根本没有看到脚本。我应该构建自定义输出组件吗?

EDIT2:AFAIK 问题在于反应式输出的表看不到 JavaScript。测试:当我手动将非动态HTML代码添加到UI时。R具有ImpactStory JS需要了解的有关文章的所有属性,小部件呈现正常。另外,如果我添加,在服务器中。R,输出的数据框中的脚本元素,小部件被渲染,但也 - 永远不会停止这样做,导致循环:) 我想我需要的类似于这里提出的问题,问题 nr 2

好吧,我找到了一个不漂亮但暂时可行的解决方案。

renderTable 使用 xtable 来渲染 HTML 表,您可以在其中定义自己的清理功能,请参见 http://cran.r-project.org/web/packages/xtable/vignettes/xtableGallery.pdf(第 7 页)

在这里,我只是将列标题"Widget"替换为定义脚本的字符串:

output$table <- renderTable({  
   ...
  }, include.rownames = FALSE, sanitize.text.function = function(s) sub("Widget", "<script type='"text/javascript'" src='"http://impactstory.org/embed/v1/impactstory.js'"></script>", s))

出于我还不明白的原因,一开始有一组双小部件。

感谢您的耐心等待。