如何在R Shiny Application中添加JavaScript来更改CSS文件

Joh*_*aul 3 javascript r shiny

我正在构建一个R Shiny应用程序,有时会看到独立,有时会在另一个网页的iframe中查看.我想根据查看的位置有一个不同的.css文件,所以我需要添加一个JavaScript语句来选择正确的.css.我现在拥有的是:

ui.r

headerPanel(winowTitle="PageTitle",

list(tags$head(
tags$script('type = "text/javascript",  if(window.self === window.top) {
 tags$link(rel="stylesheet", type="text/css", href="FullSite.css")} 
 else{ tags$link(rel="stylesheet", type="text/css", href="InFrame.css"})'),

  (other stuff that works)), etc
Run Code Online (Sandbox Code Playgroud)

当我运行它时应用程序工作,但它不读取.css文件.我究竟做错了什么?

谢谢

Ram*_*ath 6

这是一种方法.我已经取代了R代码里面scriptjavascript.第一行使用javascript中的三元运算符将样式表的值设置为适当的值.

list(tags$head(tags$script('type = "text/javascript",
  stylesheet = window.self === window.top ? "FullSite.css" : "InFrame.css"
  $("head").append("<link rel=stylesheet type=text/css href=" + stylesheet + ">") 
')))
Run Code Online (Sandbox Code Playgroud)

更新:这是动态添加样式表的更好方法.我用过这个SO帖子来修改我的答案.

  list(tags$head(tags$script('type = "text/javascript"', '
    var ss = document.createElement("link");
    ss.type = "text/css";
    ss.rel = "stylesheet";
    ss.href = window.self === window.top ? "FullSite.css" : "InFrame.css"
    document.getElementsByTagName("head")[0].appendChild(ss);
  ')))
Run Code Online (Sandbox Code Playgroud)