如何制作一个闪亮的或 javascript 警报出现在其他 windows/apps 前面

How to make a shiny or javascript alert that appears in front of other windows/apps

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

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

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

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

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

谢谢!

更好的选择是使用浏览器通知。这将触发浏览器在所有 windows 和所有其他软件程序之前发送通知。此外,这适用于所有平台,无论 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可能有点不同,但仍应高于所有程序。