如何用C#桌面应用拦截Chrome/Firefox通知并获取跳转地址
获取Chrome/Firefox通知跳转地址的解决方案
你遇到的问题核心在于:Chrome和Firefox不会把跳转地址暴露在NotificationListener的基础属性(比如Title、BodyText)里,而是藏在通知的原始XML payload或激活事件中,以下是具体实现步骤:
1. 解析通知的XML Payload
通过NotificationListener获取到通知对象后,提取其XML内容并解析,跳转链接通常存在于actions节点下的action元素的arguments属性中:
// 假设已获取到Notification对象notification var xmlContent = notification.Content; var doc = new XmlDocument(); doc.LoadXml(xmlContent); // 查找所有带arguments属性的action节点 var actionNodes = doc.SelectNodes("//action[@arguments]"); if (actionNodes != null && actionNodes.Count > 0) { foreach (XmlNode node in actionNodes) { var jumpUrl = node.Attributes["arguments"].Value; // 此处得到的jumpUrl即为通知关联的跳转地址 } }
Chrome的通知通常直接把完整URL放在arguments中,Firefox的格式可能略有差异,需根据实际XML结构调整XPath规则。
2. 监听通知激活事件捕获跳转地址
如果需要在用户点击通知时获取跳转链接,可以监听NotificationActivated事件:
NotificationListener listener = NotificationListener.Current; listener.NotificationActivated += Listener_NotificationActivated; private void Listener_NotificationActivated(NotificationListener sender, NotificationActivatedEventArgs args) { var jumpUrl = args.Argument; // 用户点击通知时,此处可直接拿到跳转地址 }
这个方法无需解析XML,直接获取浏览器传递的激活参数,但仅在用户主动点击通知时触发。
3. 浏览器兼容性注意事项
- Chrome:跳转地址多为标准HTTP/HTTPS URL,或Chrome内部协议链接(如
chrome://settings),直接提取arguments值即可。 - Firefox:部分版本会把跳转地址封装在
launch属性里,或使用特殊格式参数,需额外判断XML节点属性。 - 确保你的应用已在Windows设置中启用「通知访问」权限,否则无法获取完整通知内容。
内容的提问来源于stack exchange,提问作者Luca Rifezza
相关产品推荐
相关产品推荐

