【问题标题】:How to make a shiny or javascript alert that appears in front of other windows/apps如何制作出现在其他窗口/应用程序前面的闪亮或 javascript 警报
【发布时间】:2021-12-13 03:34:13
【问题描述】:

我正在编写一个应用程序,该应用程序将用于将大量照片(通常一次数万张)从 SD 卡复制到外部硬盘驱动器,人们在做其他工作时将在后台运行这些照片。我想在文件复制完成时通知用户,这样他们就不必继续检查应用程序。我过去使用过shinyalert(),并且我也知道使用 javascript 函数来发送警报(这是我发现的:

$( document ).ready(function() {
  Shiny.addCustomMessageHandler('alert', function(message) {
    alert(message)
  })
});

)。但是,那些只在应用程序打开时出现,我想要一些会在任何其他窗口前面弹出的东西。我的解决方案是使用 system2() 调用一个 powershell 脚本,我从这个页面借用了这个脚本:https://gist.github.com/Windos/9aa6a684ac583e0d38a8fa68196bc2dc#file-toast-notification-not-working-on-windows-fall-creators-update-ps1 并更改了警报的实际文本。

powershell 脚本运行良好,但我担心如果用户使用不同版本的 Windows,它将无法运行。 (该应用程序旨在作为一个包部署并在用户计算机上本地运行,而不是从闪亮的服务器上运行)。

shinyalert 或 javascript 警报中是否有任何选项或设置可以更改以使它们在其他窗口前可见?和/或 powershell 脚本选项是否足够强大,可以在不同的计算机上运行?

谢谢!

【问题讨论】:

    标签: javascript r powershell shiny shinyalert


    【解决方案1】:

    更好的选择是使用浏览器通知。这将触发浏览器在所有窗口和所有其他软件程序前发送通知。此外,这适用于所有平台,无论是什么版本的 Windows、Linux 或 MacOS,只要他们有现代浏览器,如 Chrome、Firefox、Edge 或其他,它都可以工作。

    这是怎么做的:

    $( document ).ready(function() {
      Shiny.addCustomMessageHandler('alert', function(data) {
        Notification.requestPermission().then(function() {
          new Notification(data.msg);
        });
      })
    });
    
    

    在您的闪亮服务器中,完成您的流程后,添加此

      session$sendCustomMessage(
        type = 'alert',
        message = list(
          msg = "my message"
        )
      )
    

    完整代码:

    library(shiny)
    
    ui <- fluidPage(
      tags$script(
          '
          $( document ).ready(function() {
            Shiny.addCustomMessageHandler(\'alert\', function(data) {
              Notification.requestPermission().then(function() {
                new Notification(data.msg);
              });
            })
          });
          '
      )
    )
    
    server <- function(input, output, session) {
      observe({
          # do some thing 
          Sys.sleep(2)
          session$sendCustomMessage(
              type = 'alert',
              message = list(
                  msg = "my message"
              )
          )
      })
    }
    
    shinyApp(ui, server)
    

    第一次会询问用户是否允许,一旦他们接受,就会显示通知。

    在 Linux 上显示时,Windows 可能有点不同,但仍应高于所有程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 2017-09-28
      • 2018-12-29
      • 2016-08-31
      • 2011-12-13
      • 2015-04-03
      相关资源
      最近更新 更多