如何添加JavaScript以更改R应用程序中的CSS文件

如何添加JavaScript以更改R应用程序中的CSS文件,javascript,r,shiny,Javascript,R,Shiny,我正在构建一个R闪亮的应用程序,有时可以单独看到,有时可以在另一个网页的iframe中查看。我希望根据查看的位置使用不同的.css文件,因此我需要添加一个JavaScript语句来选择正确的.css。我现在得到的是: ui.r headerPanel(winowTitle="PageTitle", list(tags$head( tags$script('type = "text/javascript", if(window.self === window.top) { tags$lin

我正在构建一个R闪亮的应用程序,有时可以单独看到,有时可以在另一个网页的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
当我运行这个程序时,应用程序可以工作,但它不读取任何一个.css文件。我做错了什么


谢谢

这里有一种方法。我已将
script
中的R代码替换为
javascript
。第一行使用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 + ">") 
')))

您正在
标记$script
中使用R代码,这就是此操作不起作用的原因。您需要用
javascript
替换代码的
else
部分。谢谢,但这不起作用。站点加载正常,但不使用css文件。当我检查站点源代码时,我看到:
type=“text/javascript”,stylesheet=window.self==window.top?“FullSite.css”:“InFrame.css”$(“head”).append(“link rel=stylesheet type=text/css href=“+stylesheet+”)
似乎没有正确读取。啊,好的。你需要逃离他们。请尝试转义
符号,以便它们不会分别转换为
<
>
。对不起,我对javascript几乎一无所知-如何转义它们?我已添加了一个替代解决方案,该解决方案可以在不转义的情况下工作。这不是问题。这对我来说也是一次很好的学习经历:)
  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);
  ')))