如何添加JavaScript以更改R应用程序中的CSS文件
我正在构建一个R闪亮的应用程序,有时可以单独看到,有时可以在另一个网页的iframe中查看。我希望根据查看的位置使用不同的.css文件,因此我需要添加一个JavaScript语句来选择正确的.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
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);
')))