如何将JS代码存入RCloud资产簿并在Shiny中调用?
我来帮你搞定这个问题!核心问题出在你调用JS资产的方式不对——你用了R专属的代码执行方法来处理JS,还把R变量名当作URL给浏览器请求,这肯定行不通。下面是完整的解决步骤:
1. 先把JS文件正确上传到RCloud资产簿
- 先从
tinymce.cachefly.net/4.0/tinymce.min.js下载JS文件到本地 - 打开你的RCloud资产笔记本(也就是代码里
assetsNotebook对应的那个笔记本),点击资产上传按钮,把下载好的文件传上去,命名为tinymce.js
2. 修正资产获取与Shiny调用代码
你之前用source(textConnection(tinymce.fn.source))是完全错误的,这个函数是用来运行R代码的,JS代码根本不能这么处理。正确的做法是获取JS内容后,直接嵌入到Shiny的<script>标签里:
# 从RCloud资产簿获取JS文件内容 tinymce_js_content <- rcloud.get.asset("tinymce.js", notebook = assetsNotebook) # 在Shiny的UI部分嵌入JS代码 fluidRow( singleton(tags$head(tags$script(HTML(tinymce_js_content)))), column(12, offset = 0, hr(), h4('Side Panel Text'), uiOutput("editor1")) )
3. 别忘了初始化TinyMCE编辑器
光加载JS文件还不够,得初始化编辑器实例才能用。在你的Shiny Server部分加上这段代码:
output$editor1 <- renderUI({ tagList( # 创建编辑器对应的文本框 tags$textarea(id = "my_editor", rows = 10, placeholder = "在这里输入内容..."), # 初始化TinyMCE编辑器 tags$script(HTML(" tinymce.init({ selector: '#my_editor', # 这里可以加你需要的配置,比如插件、工具栏 plugins: 'advlist autolink lists link image charmap print preview', toolbar: 'undo redo | bold italic | alignleft aligncenter | bullist numlist | link' }); ")) ) })
为啥之前的方法不行?
source(textConnection(...)):这个函数是用来执行R代码的,JS代码不是R代码,运行这个只会报错或者毫无效果。tags$script(src ="tinymce.fn.source"):浏览器会把tinymce.fn.source当成一个网页地址去请求,但这只是你R里的一个变量名,浏览器根本找不到这个资源,所以必须直接把JS代码嵌入到script标签里。
内容的提问来源于stack exchange,提问作者user8272537
相关产品推荐
相关产品推荐

