show with app
library(shiny)

ui <- fluidPage(
  # Javascript 处理不同源父窗口跨域传入的参数等。
  tags$head(tags$script("
                // 记录父窗口
                parent = null;
                window.addEventListener('message', function(e) {
                        //alert(e.data);
                        try{
                            //记录父窗口以备回发信息
                            parent = e.source;
                            //通知Shiny input已更新,触发reactive,observe,observeEvent等
                            //Shiny.setInputValue('freq', e.data, {priority:'event'});
                            Shiny.setInputValue('freq', e.data);
                        } catch (error){
                              alert(error);
                            }
                        },false);
                   
                // 点击时传出参数    
                $(document).on('click', '.btn-success', function (evt) {
                      evt.preventDefault(); 
                      //alert('click!');
                      if (parent == null){
                        alert('click!');
                      } else {
                        try{
                          var freq = document.getElementById('freq');
                          parent.postMessage(freq.value, '*');
                        } catch(error){
                          alert(error);
                        }
                      }
                });  
                
              ")),
  
  textOutput("name"),
  textOutput("MPG"),
  sliderInput("freq",
              "index:",
              min = 1,  max = length(row.names(mtcars)), value = 10, round = TRUE),
  actionButton("sendout", "传出参数", class = "btn-success")
)

server <- function(input, output, session) {
  # 响应输入的变化
  freq<- reactive({
    paste(input$freq)
  })
  
  # 更新文本
  output$name <- renderText({
    name<- row.names(mtcars)[input$freq]
  })

  # 更新文本
  output$MPG <- renderText({
    name<- row.names(mtcars)[input$freq]
    paste(name, "'s mpg:", mtcars[name,]$mpg)
  })

  observe({
    print(paste("observe triggered:",input$freq))
    # 更新浏览器端JS Widget
    updateSliderInput(session, "freq", value = freq())
  })
  
  observeEvent(freq(),{
    print(paste("event triggered:",input$freq))
    # 更新浏览器端JS Widget
    updateSliderInput(session, "freq", value = freq())
  })
  
}

shinyApp(ui, server)