如何制作一个闪亮的或 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可能有点不同,但仍应高于所有程序。
我正在编写一个应用程序,用于将大量照片(通常一次通常数万张)从 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可能有点不同,但仍应高于所有程序。