项目场景:

客户需求文档中,要求在Win10系统下须使用Chrome谷歌浏览器展示页面,但高层相关方希望页面展示时可以实现全屏效果以提高用户体验。

对于谷歌浏览器的全屏功能来说,前端的实现已经不行了,之前谷歌浏览器基于安全的考虑封禁了任何调用全屏的事件(必须用户手势user gesture),有尝试过捕获用户手势触发点击事件的参数,但捕获到后发现事件参数太多(密密麻麻的ε=ε=ε=ε=ε=ε=┌(; ̄◇ ̄)┘),模拟起来太费劲会浪费太多时间(还是算了吧 ╮(๑•́ ₃•̀๑)╭)。

由于Chrome谷歌浏览器的全屏触发键盘按键是F11,我就以按F11为目标整理一下思路。首先,页面初始化发送一个get请求给后端程序接口,程序接收请求开始编写vbs脚本并生成vbs脚本文件保存在Win10默认桌面路径上,程序再运行此脚本点击F11完成全屏效果,流程图如下:


问题描述:

接下来的问题在于后端代码执行运行vbs脚本时遇到的权限问题,这段代码如下:

 Process process = Runtime.getRuntime().exec(cmd);

原因分析:

假如运行没有系统管理员权限的cmd来运行jar包的话,你会发现这段代码不会运行也不会报错,但是就是没有效果出来(咦?我明明按了F11,全屏呢 ◔ ‸◔?)。


解决方案:

接下来就来看一下代码部分,首先先从后端程序接口开始:

/*** @Author: Tony Peng* @Date: 2021/7/9 10:20**/
@Slf4j
@RestController
@RequestMapping("/fullscreen")
public class FullscreenController {@GetMapping("/active")public void active(HttpServletRequest request) {//获取客户端IP,用来写日志的String clientIp = request.getRemoteHost();//桌面生成脚本的文件名,可自定义String fileName = "F11";//vbs脚本内容String command = "set ws=createObject(\"WScript.Shell\")\nws.SendKeys \"{F11}\"";//获取Win10默认桌面路径,亲测部署可用String fileUrl = FileSystemView.getFileSystemView().getHomeDirectory() + "\\" + fileName + ".vbs";//生成vbs脚本文件在桌面上File file = new File(fileUrl);try {//这边判断一下,文件不存在的话就再写一份if (!file.exists()) {FileWriter fw = new FileWriter(fileUrl);fw.write(command);fw.close();}String[] cmd = new String[]{"wscript", fileUrl};//此行代码运行vbs脚本文件会需要系统管理员权限Process process = Runtime.getRuntime().exec(cmd);process.waitFor();} catch (Exception e) {log.error("客户端IP【{}】F11调用失败!原因:" + e.getMessage(), clientIp);}log.info("客户端IP【{}】F11调用成功!", clientIp);}} (ง •̀_•́)ง

以上接口写好后用自己的编译器(偶用滴素IDEA (●>∀<●))运行起来,用另一台电脑打开Postman测试一下接口,屡试不爽,兴冲冲的打包部署,部署完后却发现测来测去咋滴都没效果呢ヽ(.◕ฺˇд ˇ◕ฺ;)ノ。

还好,经验丰富滴我,试了一下系统管理员cmd运行jar包,诶~~~口以了!!!。:.゚ヽ(。◕‿◕。)ノ゚.:。+゚。

然后,开始写批处理文件先获取系统管理员权限打开cmd后台运行jar包,批处理文件代码如下:

::::::::::::::::::::::::::::::::::::::::::::
:: Elevate.cmd - Version 4
:: Automatically check & get admin rights
::::::::::::::::::::::::::::::::::::::::::::@ECHO offCLSECHO.ECHO =============================ECHO Running Admin shellECHO =============================:initsetlocal DisableDelayedExpansionset cmdInvoke=1set winSysFolder=System32set "batchPath=%~0"for %%k in (%0) do set batchName=%%~nkset "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"setlocal EnableDelayedExpansion:checkPrivilegesNET FILE 1>NUL 2>NULif '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges ):getPrivilegesif '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)ECHO.ECHO **************************************ECHO Invoking UAC for Privilege EscalationECHO **************************************ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"ECHO args = "ELEV " >> "%vbsGetPrivileges%"ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"ECHO args = args ^& strArg ^& " "  >> "%vbsGetPrivileges%"ECHO Next >> "%vbsGetPrivileges%"if '%cmdInvoke%'=='1' goto InvokeCmd ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"goto ExecElevation:InvokeCmd@ECHO OFFECHO args = "/c """ + "!batchPath!" + """ " + args >> "%vbsGetPrivileges%"ECHO Set ws = CreateObject("Wscript.Shell") ECHO UAC.ShellExecute "%SystemRoot%\%winSysFolder%\cmd.exe", args, "", "runas", 1 >> "%vbsGetPrivileges%":ExecElevation"%SystemRoot%\%winSysFolder%\WScript.exe" "%vbsGetPrivileges%" %*exit /B:gotPrivileges@ECHO OFFsetlocal & cd /d %~dp0if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul  &  shift /1)::::::::::::::::::::::::::::::START::::::::::::::::::::::::::::::这里输入你的代码@ECHO offstart javaw -Dfile.encoding=utf-8 -jar -Xmn128m -Xms256m -Xmx256m %~dp0\fullscreen.jar

先创建一个文本文件(后缀.txt),编辑输入以上代码,文件后缀改成.bat,双击运行(jar包必须和批处理文件同一个目录下),这时弹窗完两次即启动完成。

作为一个程序员,能少一次弹窗我都觉得开熏 (*^▽^*) ,所以我又写了一个vbs脚本文件隐藏第一次弹窗,目前还没想到如何隐藏第二次弹窗的方法,如果有大神可以指导一下,可以留言一下我再做一下补充并申明某某某大神,感激不尽!Thanks♪(・ω・)ノ

隐藏第一次cmd弹窗脚本如下:

Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c D:\Fullscreen\fullscreen.bat",vbhide

PS:盘符路径请修改成运行jar包的批处理文件的路径。

这时就差不多大功告成啦!✿✿ヽ(°▽°)ノ✿

下面来补充前端的部分,如何用JS判断当前谷歌浏览器是否全屏,代码如下:

 //谷歌浏览器判断如果不是全屏的情况下if (!(document.body.scrollHeight === window.screen.height && document.body.scrollWidth === window.screen.width)) {//发送全屏请求}

PS:后端程序jar包必须和客户端在同一台计算机上部署,否则全屏无效。

源码链接:

https://github.com/tony901/Fullscreen

都看完啦,给个一键三连八~ \ (*^▽^*) /

行到水穷处,坐看云起时。

【SpringBoot项目实战】之Chrome谷歌浏览器全屏相关推荐

  1. 【网络通信 -- WebRTC】项目实战记录 -- Chrome 启动参数总结

    [网络通信 -- WebRTC]项目实战记录 -- Chrome 启动参数总结 1 -- 报告伪分配跟踪.伪跟踪从当前活动的跟踪事件派生. 2 --/prefetch:1 /prefetch:启动各种 ...

  2. springboot 项目实战 基本框架搭建(IDEA)

    springboot 项目实战 基本框架搭建(IDEA) IDEA下载 我使用的是破解的专业版IDEA,使用权一直到2089年: 下载IDEA: 下载processional版本,然后百度搜索激活码即 ...

  3. Android 系统(153)---全面屏项目很多APP占不满全屏

    全面屏项目很多APP占不满全屏 刘海屏项目,分辨率720x1498设置系统除外壁纸显示不全,且部分界面底部显示高度有2个navigationbar高度 解决方案: 那是因为全面屏的长宽比超过了1.86 ...

  4. Vue整合SpringBoot项目实战之Vue+Element-Ui搭建前端项目

    Vue整合SpringBoot项目实战之Vue+Element-Ui搭建前端项目 源码(欢迎star): 前端项目代码 后端项目代码 系列文章: Vue整合SpringBoot项目实战之后端业务处理 ...

  5. 【SpringBoot项目实战】图片压缩包上传、解压、存储等等一套流程教学

    [SpringBoot项目实战]图片压缩包上传.解压.存储等等一套流程教学 前言 一.压缩包上传 1.接口实现 2.获取压缩包的文件名和文件路径 二.压缩包解压并保存 1.处理压缩包文件方法 解压缩步 ...

  6. 史上最全阿里云服务器上Docker部署Springboot项目 实战 每一步都带详细图解!!!

    在学习编程的时候,我们都会想,该怎么把自己写出来的项目和创意分享给大家勒.直接给代码吗?平常人看不懂,环境还需要一大堆. 那么部署到服务器上,让人能够直接访问,我想这应该是最棒的方式了吧. 使用Doc ...

  7. 安卓谷歌浏览器全屏打开HTML

    一开始打算,将vue项目嵌入到webview中,发布到大屏设备 页面中有地图拖拽等功能,使用crosswalk嵌入后,交互变的很卡顿 腾讯X5和Chrome内核都有试过,crosswalk也不在维护 ...

  8. springboot项目实战_2019学习进阶之路:高并发+性能优化+Spring boot等大型项目实战...

    Java架构师主要需要做哪些工作呢? 负责设计和搭建软件系统架构(平台.数据库.接口和应用架构等),解决开发中各种系统架构问题. 优化现有系统的性能,解决软件系统平台关键技术问题攻关.核心功能模块设计 ...

  9. Chrome浏览器全屏打开指定网页以及开机自启

    前言 最近一个项目是给社区做一个便民服务,设备是室外触摸大屏(windows系统),而项目载体居然是web网页.项目的核心是只给用户使用网页上的内容,那么需求就很明确了: 浏览器全屏打开指定网页 浏览 ...

最新文章

  1. 不用se11创建表结构,作smartforms
  2. 选择排序_在N + 1场景中,使用@NamedEntityGraph更有选择地加载JPA实体
  3. 明明白白你的Linux服务器——网络篇
  4. MySQL学习笔记_7_MySQL常用内置函数
  5. vscode插件:REST Client发送http请求
  6. linux+qt导入构建,如何在Qt Creator项目向导中添加自定义构建步骤?
  7. java选择排序解释_选择排序
  8. 解读ASP.NET 5 MVC6系列(14):View Component
  9. Codeforces Gym 100203G G - Good elements 暴力
  10. mysql 在线优化工具_MySQL SQL查询优化工具EverSQL
  11. word自动生成目录,设置从指定页码开始
  12. 九阴真经 服务器 显示维护,《九阴真经》登陆不上 解决方法攻略
  13. maven核心,pom.xml详解
  14. 智能车浅谈——过程通道篇
  15. 云服务器测速脚本_服务器测速命令
  16. 马斯克OpenAI中心招人了:一场AI末日的保卫战
  17. 限定特定的IP访问服务器
  18. 如何利用OMIM数据库获取肿瘤相关所有突变基因?
  19. 终极版C语言(七)-尹成-专题视频课程
  20. 鹏业软件安装算量计算规则,喷淋识别、以及保温设置的问题解决

热门文章

  1. 食品加工行业MES与APS的应用
  2. 大华平台linux密码,大华DSS平台低权限账户越权直接修改system密码
  3. 一键拼接微信好友头像
  4. 《恒盛策略》外资巨头突然出手!又有炒股软件罢工
  5. SSD:Single Shot MultiBox Detector解读
  6. 〔首届CSDN.南京区程序员聚会〕正式报名情况[每日更新7月19日 17:30]
  7. 零基础学SQL(十一、视图)
  8. 问题-ListView 使用的时候,已经遇到的问题;
  9. 实时摄像头直播方案 RTSP
  10. Tableau联动之工作表联动