vue实现浏览器桌面通知

浏览器桌面通知:当浏览器最小化,或者切换到其他标签页不在当前系统页面,或在其他页面时依然可以显示通知

*使用前注意:生产环境地址必须为https协议,开发环境可以用localhost IP地址,且必须允许显示通知才能显示桌面通知
*存在兼容性问题,不同系统不同浏览器甚至不同版本浏览器效果略有不同

方案一: H5 JavaScript Web Notification API

Notification官网
目前Notification除了IE浏览器不支持外, 其他浏览器都已支持桌面通知,移动端浏览器基本都未支持

      // 判断是否支持显示
      showJudge (data) {
        if (!('Notification' in window)) {
          alert('抱歉,此浏览器不支持桌面通知!')
        }
// granted: 用户允许该网站发送通知 default: 默认值,用户还未选择 denied: 用户拒绝该网站发送通知
// Notification.permission === 'granted' 可用于检测用户通知权限
        Notification.requestPermission().then((result) => {
          if (result === 'denied') {
            console.log('用户拒绝')
            return
          } else if (result === 'default') {
            console.log('用户未授权')
            return
          }
          this.sendMesgToDesk(data)
        })
      },
      // 显示消息通知
      sendMesgToDesk (data) {
        let notification = null
        let title = data.data.auditTitle
        let str1 = data.data.applicant + ' ' + data.data.applyTime
        let options = {
          tag: data.data.wfFormId, // 多条消息时tag相同只显示一条通知,需要显示多条时tag一定要不同,(谷歌每次只能显示一条,火狐可以显示多条)
          body: str1, // 通知主体
          data: { // 可以放置任意数据,方便后续使用
            content: data.data,
            originUrl: `http://localhost:8889/#/home`
          },
          requireInteraction: true, // 不自动关闭通知 默认值为false,通知会在三四秒之后自动关闭,(谷歌有用,火狐依然会自动关闭)
          image: require('../../../assets/img/AAA.png'), // 通知上方可显示需要展示的大图
          icon: require('../../../assets/img/XXX.png') // 通知图标 默认是浏览器图标
        }
        notification = new Notification(title, options)
        // 事件处理
        notification.onclick = ({ currentTarget: { data } }) => {
          // notification.close() 单个通知关闭
          window.focus()
          // 默认进入系统之前打开的页面,也可以这里自定义进入的页面
          window.location.href = data.originUrl
        }
        notification.onshow = () => {
          console.log('通知显示了')
        }
        notification.onclose = () => {
          console.log('通知被关闭了')
        }
        notification.onerror= () => {
          console.log('遇到错误')
        }
      },

方案二: push.js 工具 (基于notification)

push官网

一、引入

1.script引入方式

<script src="https://cdnjs.cloudflare.com/ajax/libs/push.js/0.0.11/push.min.js"></script>

2.npm安装引入

npm install push.js --save

引入

import Push from 'push.js'
// 如果全局使用在main.js引入后,进行挂载:
Vue.prototype.Push = Push

二、主要代码

  // 手动获取用户桌面通知权限
  if (this.Push.Permission.GRANTED) { // 判断当前是否有权限,没有则手动获取
    this.Push.Permission.request()
  }
  // 监听浏览器 当前系统是否在当前页
  document.addEventListener('visibilitychange', () => {
    if (!document.hidden) {   // 处于当前页面
    // 关闭之前的消息通知,清空
      this.Push.clear()
      this.notificationArr = []
    }
  })
	// 发送 浏览器 桌面通知
      showDeskNotify (data) {
        if (!this.Push.Permission.has()) {
          alert('抱歉,此浏览器不支持桌面通知!')
          return
        }
        // 关闭之前的消息通知
        this.Push.clear()
        let title = '消息通知(' + (this.auditMessageArr.length + 1) + '条未读)'
        this.Push.create(title, {
          tag: data.data.wfFormId,
          body: '类型:' + data.data.auditTitle + '\n时间:' + data.data.applyTime,
          requireInteraction: true,
          icon: require('../../../assets/img/XX.png'),
          onClick: () => {
            window.focus()
            // this.close() // 单个关闭
            this.Push.clear() // 全部关闭
            // window.location.href = data.originUrl
          }
        })
      },

方案三: iNotify.js JS

JS 实现浏览器的 title 闪烁、滚动、声音提示、chrome、Firefox、Safari等系统通知

1.npm安装引入

npm install title-notify --save

2.主要代码

var iNotify = new iNotify().init()
//推荐下面写法
var iNotify = new iNotify({
    message: '有消息了。',//标题
    effect: 'flash', // flash | scroll 闪烁还是滚动
    openurl:"http://www.bing.com", // 点击弹窗打开连接地址
    onclick:function(){ //点击弹出的窗之行事件
       console.log("---")
    },
    //可选播放声音
    audio:{
        //可以使用数组传多种格式的声音文件
        file: ['msg.mp4','msg.mp3','msg.wav']
        //下面也是可以的哦
        //file: 'msg.mp4'
    },
    //标题闪烁,或者滚动速度
    interval: 1000,
    //可选,默认绿底白字的  Favicon
    updateFavicon:{
        // favicon 字体颜色
        textColor: "#fff",
        //背景颜色,设置背景颜色透明,将值设置为“transparent”
        backgroundColor: "#2F9A00"
    },
    //可选chrome浏览器通知,默认不填写就是下面的内容
    notification:{
        title:"通知!",//设置标题
        icon:"",//设置图标 icon 默认为 Favicon
        body:'您来了一条新消息'//设置消息内容
    }
})

3.其他

判断浏览器弹框通知是否被阻止。

  iNotify.isPermission()

播放声音

 iNotify.player() 
 // 自动播放
 iNotify.loopPlay()

停止播放

iNotify.stopPlay()

设置播放声音URL

 1 iNotify.setURL('msg.mp3')// 设置一个
 2 iNotify.setURL(['msg.mp3','msg.ogg','msg.mp4']) // 设置多个

添加计数器

iNotify.addTimer()

清除计数器

 iNotify.clearTimer()
  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Vue.js 是一个流行的前端框架,它通过使用组件化的开发方式,使得构建用户界面更加简单和可扩展。但是,Vue.js 本身并不直接支持播放 RTSP 流这样的功能。要实现浏览器无插件播放 RTSP 流,我们需要借助一些其他的技术和插件。 一种常用的方法是使用 hls.js 或者 flv.js 这样的 JavaScript 库来处理 RTSP 流。这两个库可以通过将 RTSP 流转换为 HLS 或者 FLV 格式来在浏览器中播放。我们可以通过 npm 或者 yarn 安装这些库,并在 Vue.js 项目中使用。 首先,我们需要在 Vue.js 项目中安装 hls.js 或者 flv.js。可以通过运行像 `npm install hls.js` 或者 `yarn add flv.js` 这样的命令来安装它们。 然后,在 Vue 组件中使用这些库来播放 RTSP 流。我们可以在组件的 `mounted` 生命周期钩子中进行初始化设置和播放操作。这通常涉及到创建一个播放器实例,并指定 RTSP 流的 URL。 import Hls from 'hls.js'; // 或者 import flvjs from 'flv.js'; export default { mounted() { // 使用 hls.js 的示例代码 const video = this.$refs.video; // 获取 video 元素的引用 const hls = new Hls(); hls.loadSource('rtsp://example.com/stream'); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, function() { video.play(); }); // 使用 flv.js 的示例代码 const flvPlayer = flvjs.createPlayer({ type: 'flv', url: 'rtsp://example.com/stream', }); flvPlayer.attachMediaElement(video); flvPlayer.load(); flvPlayer.play(); }, }; 根据不同的使用情况和具体需求,需要选择适合的库和对应的初始化设置。需要注意的是,这些库可能有不同的兼容性和功能限制,因此在选择和使用需要参考它们的文档和示例。 总结起来,如果要在 Vue.js 项目中实现浏览器无插件播放 RTSP 流,我们可以使用 hls.js 或者 flv.js 这样的 JavaScript 库。通过安装这些库,并在 Vue 组件中使用它们的示例代码,我们可以实现 RTSP 流的播放功能。 ### 回答2: 在Vue实现浏览器无插件播放RTSP流,可以通过以下步骤实现: 1. 首先,需要在Vue项目中引入一个能够处理RTSP流的JavaScript库,如hls.js或者node-rtsp-stream。 2. 在Vue组件中,使用该库提供的API,创建一个RTSP流播放器实例。 3. 在Vue组件的模板中,使用 `<video>` 标签来显示播放器的画面,并给它一个唯一的ID。 4. 在Vue组件的生命周期方法中,通过对播放器实例的配置,将RTSP流链接传入播放器,并将视频画面绑定到 `<video>` 标签上。 5. 可以通过一些操作控件按钮,如播放、暂停、停止等来控制播放器的行为。 6. 如果需要实现一些特殊效果,如实更新进度条、显示播放间等,可以对播放器实例进行监听,并在触发相应事件更新相关的组件数据。 需要注意的是,由于RTSP流是一种实传输的协议,要在浏览器中实播放RTSP流,并非常困难。因为浏览器对RTSP协议的支持有限,通常需要借助第三方库来实现。同,RTSP协议也会受到网络环境的影响,如果网络状况不好,可能会导致播放不流畅或者中断。 以上是实现浏览器无插件播放RTSP流的一般步骤,具体实现方法还需要根据具体的开发环境和需求来定制。在实际开发中,可以参考相关的文档和示例代码,来更好地理解和应用。 ### 回答3: Vue是一种用于构建用户界面的JavaScript框架,可以用于在浏览器中创建交互式的Web应用程序。Vue本身并不直接支持播放rtsp流,因为rtsp是一种实流传输协议,而不是普通的HTML5视频格式。 要在浏览器中无需插件播放rtsp流,可以借助第三方插件或库来实现。一种常见的解决方案是使用ffmpeg.js和hls.js。 首先,采用ffmeg.js将rtsp流转换为hls流。ffmpeg.js是一个开源的JavaScript版本的ffmpeg,可以在浏览器中进行视频转码和处理。 使用ffmpeg.js将rtsp流转换为hls流的代码片段如下: ``` ffmpeg({ arguments: ['-i', 'rtsp://stream_url', '-f', 'hls', 'output.m3u8'] }) .then((output) => { // 转换完成 console.log('转换成功'); }) .catch((error) => { // 转换失败 console.error('转换失败'); }); ``` 然后,使用hls.js库将生成的hls流播放在浏览器中。hls.js是一个开源的JavaScript库,用于在浏览器中播放HLS(HTTP Live Streaming)流。 在Vue中使用hls.js播放hls流的代码片段如下: ``` <template> <div> <video ref="hlsPlayer" controls></video> </div> </template> <script> import Hls from 'hls.js'; export default { mounted() { if (Hls.isSupported()) { const video = this.$refs.hlsPlayer; const hls = new Hls(); hls.loadSource('http://path_to_hls_stream.m3u8'); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, () => { video.play(); }); } }, }; </script> ``` 这样,借助ffmpeg.js和hls.js,我们可以在Vue实现浏览器无需插件播放rtsp流。请注意,转换rtsp流为hls流和使用hls.js播放hls流可能需要一定的服务器端配置和前端代码调整,具体实现会根据实际情况有所变化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值