如何制作出现在其他窗口/应用程序前面的闪亮或 javascript 警报
Posted
技术标签:
【中文标题】如何制作出现在其他窗口/应用程序前面的闪亮或 javascript 警报【英文标题】:How to make a shiny or javascript alert that appears in front of other windows/apps 【发布时间】: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 脚本选项是否足够强大,可以在不同的计算机上运行?
谢谢!
【问题讨论】:
【参考方案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 可能有点不同,但仍应高于所有程序。
【讨论】:
以上是关于如何制作出现在其他窗口/应用程序前面的闪亮或 javascript 警报的主要内容,如果未能解决你的问题,请参考以下文章
如何在闪亮或 flexdahsboard 中制作用户选择的变量图表?
QTableWidget子窗口如何放在父窗口前面或父窗口下面?