SpringBoot實(shí)戰(zhàn)項(xiàng)目之谷歌瀏覽器全屏效果實(shí)現(xiàn)
項(xiàng)目場(chǎng)景:
客戶(hù)需求文檔中,要求在Win10系統(tǒng)下須使用Chrome谷歌瀏覽器展示頁(yè)面,但高層相關(guān)方希望頁(yè)面展示時(shí)可以實(shí)現(xiàn)全屏效果以提高用戶(hù)體驗(yàn)。
對(duì)于谷歌瀏覽器的全屏功能來(lái)說(shuō),前端的實(shí)現(xiàn)已經(jīng)不行了,之前谷歌瀏覽器基于安全的考慮封禁了任何調(diào)用全屏的事件(必須用戶(hù)手勢(shì)user gesture),有嘗試過(guò)捕獲用戶(hù)手勢(shì)觸發(fā)點(diǎn)擊事件的參數(shù),但捕獲到后發(fā)現(xiàn)事件參數(shù)太多(密密麻麻的ε=ε=ε=ε=ε=ε=┌(; ̄◇ ̄)┘),模擬起來(lái)太費(fèi)勁會(huì)浪費(fèi)太多時(shí)間(還是算了吧 ╮(๑•́ ₃•̀๑)╭)。
由于Chrome谷歌瀏覽器的全屏觸發(fā)鍵盤(pán)按鍵是F11,我就以按F11為目標(biāo)整理一下思路。首先,頁(yè)面初始化發(fā)送一個(gè)get請(qǐng)求給后端程序接口,程序接收請(qǐng)求開(kāi)始編寫(xiě)vbs腳本并生成vbs腳本文件保存在Win10默認(rèn)桌面路徑上,程序再運(yùn)行此腳本點(diǎn)擊F11完成全屏效果,流程圖如下:

問(wèn)題描述:
接下來(lái)的問(wèn)題在于后端代碼執(zhí)行運(yùn)行vbs腳本時(shí)遇到的權(quán)限問(wèn)題,這段代碼如下:
Process process = Runtime.getRuntime().exec(cmd);
原因分析:
假如運(yùn)行沒(méi)有系統(tǒng)管理員權(quán)限的cmd來(lái)運(yùn)行jar包的話(huà),你會(huì)發(fā)現(xiàn)這段代碼不會(huì)運(yùn)行也不會(huì)報(bào)錯(cuò),但是就是沒(méi)有效果出來(lái)(咦?我明明按了F11,全屏呢 ◔ ‸◔?)。
解決方案:
接下來(lái)就來(lái)看一下代碼部分,首先先從后端程序接口開(kāi)始:
/**
* @Author: Tony Peng
* @Date: 2021/7/9 10:20
**/
@Slf4j
@RestController
@RequestMapping("/fullscreen")
public class FullscreenController {
@GetMapping("/active")
public void active(HttpServletRequest request) {
//獲取客戶(hù)端IP,用來(lái)寫(xiě)日志的
String clientIp = request.getRemoteHost();
//桌面生成腳本的文件名,可自定義
String fileName = "F11";
//vbs腳本內(nèi)容
String command = "set ws=createObject(\"WScript.Shell\")\nws.SendKeys \"{F11}\"";
//獲取Win10默認(rèn)桌面路徑,親測(cè)部署可用
String fileUrl = FileSystemView.getFileSystemView().getHomeDirectory() + "\\" + fileName + ".vbs";
//生成vbs腳本文件在桌面上
File file = new File(fileUrl);
try {
//這邊判斷一下,文件不存在的話(huà)就再寫(xiě)一份
if (!file.exists()) {
FileWriter fw = new FileWriter(fileUrl);
fw.write(command);
fw.close();
}
String[] cmd = new String[]{"wscript", fileUrl};
//此行代碼運(yùn)行vbs腳本文件會(huì)需要系統(tǒng)管理員權(quán)限
Process process = Runtime.getRuntime().exec(cmd);
process.waitFor();
} catch (Exception e) {
log.error("客戶(hù)端IP【{}】F11調(diào)用失??!原因:" + e.getMessage(), clientIp);
}
log.info("客戶(hù)端IP【{}】F11調(diào)用成功!", clientIp);
}
} (ง •̀_•́)ง
以上接口寫(xiě)好后用自己的編譯器(偶用滴素IDEA (●>∀<●))運(yùn)行起來(lái),用另一臺(tái)電腦打開(kāi)Postman測(cè)試一下接口,屢試不爽,興沖沖的打包部署,部署完后卻發(fā)現(xiàn)測(cè)來(lái)測(cè)去咋滴都沒(méi)效果呢ヽ(.◕ฺˇд ˇ◕ฺ;)ノ。
還好,經(jīng)驗(yàn)豐富滴我,試了一下系統(tǒng)管理員cmd運(yùn)行jar包,誒~~~口以了!??!。:.゚ヽ(。◕‿◕。)ノ゚.:。+゚。
然后,開(kāi)始寫(xiě)批處理文件先獲取系統(tǒng)管理員權(quán)限打開(kāi)cmd后臺(tái)運(yùn)行jar包,批處理文件代碼如下:
::::::::::::::::::::::::::::::::::::::::::::
:: Elevate.cmd - Version 4
:: Automatically check & get admin rights
::::::::::::::::::::::::::::::::::::::::::::
@ECHO off
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:init
setlocal DisableDelayedExpansion
set cmdInvoke=1
set winSysFolder=System32
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
setlocal EnableDelayedExpansion
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
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 OFF
ECHO 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 OFF
setlocal & cd /d %~dp0
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul & shift /1)
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
::這里輸入你的代碼
@ECHO off
start javaw -Dfile.encoding=utf-8 -jar -Xmn128m -Xms256m -Xmx256m %~dp0\fullscreen.jar
先創(chuàng)建一個(gè)文本文件(后綴.txt),編輯輸入以上代碼,文件后綴改成.bat,雙擊運(yùn)行(jar包必須和批處理文件同一個(gè)目錄下),這時(shí)彈窗完兩次即啟動(dòng)完成。
作為一個(gè)程序員,能少一次彈窗我都覺(jué)得開(kāi)熏 (*^▽^*) ,所以我又寫(xiě)了一個(gè)vbs腳本文件隱藏第一次彈窗,目前還沒(méi)想到如何隱藏第二次彈窗的方法,如果有大神可以指導(dǎo)一下,可以留言一下我再做一下補(bǔ)充并申明某某某大神,感激不盡!Thanks♪(・ω・)ノ
隱藏第一次cmd彈窗腳本如下:
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c D:\Fullscreen\fullscreen.bat",vbhide
PS:盤(pán)符路徑請(qǐng)修改成運(yùn)行jar包的批處理文件的路徑。
這時(shí)就差不多大功告成啦!✿✿ヽ(°▽°)ノ✿
下面來(lái)補(bǔ)充前端的部分,如何用JS判斷當(dāng)前谷歌瀏覽器是否全屏,代碼如下:
//谷歌瀏覽器判斷如果不是全屏的情況下
if (!(document.body.scrollHeight === window.screen.height && document.body.scrollWidth === window.screen.width)) {
//發(fā)送全屏請(qǐng)求
}
PS:后端程序jar包必須和客戶(hù)端在同一臺(tái)計(jì)算機(jī)上部署,否則全屏無(wú)效。
源碼鏈接:
https://github.com/tony901/Fullscreen
都看完啦,給個(gè)一鍵三連八~ \ (*^▽^*) /
行到水窮處,坐看云起時(shí)。

到此這篇關(guān)于SpringBoot實(shí)戰(zhàn)項(xiàng)目之谷歌瀏覽器全屏效果實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot 全屏內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微服務(wù)鏈路追蹤Spring Cloud Sleuth整合Zipkin解析
這篇文章主要為大家介紹了微服務(wù)鏈路追蹤Spring Cloud Sleuth整合Zipkin解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Java將List轉(zhuǎn)換為String的幾種常見(jiàn)方式
在實(shí)際開(kāi)發(fā)中經(jīng)常遇到List轉(zhuǎn)為String字符串的情況,下面這篇文章主要給大家介紹了關(guān)于Java將List轉(zhuǎn)換為String的幾種常見(jiàn)方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
解決import包時(shí)報(bào) Java 程序包不存在的問(wèn)題
你是否也有過(guò)在import包時(shí)idea報(bào)錯(cuò)說(shuō)這個(gè)包不存在,可是這個(gè)包我們看得到確實(shí)存在的情況,不要慌,今天這篇文章帶你徹底告別這個(gè)問(wèn)題2021-10-10
springboot集成redis實(shí)現(xiàn)消息的訂閱與發(fā)布
本文主要介紹了springboot集成redis實(shí)現(xiàn)消息的訂閱與發(fā)布,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
淺談java調(diào)用Restful API接口的方式
這篇文章主要介紹了淺談java調(diào)用Restful API接口的方式,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
nacos在liunx系統(tǒng)中啟動(dòng)成功瀏覽器卻訪(fǎng)問(wèn)不了的解決方法
在linux下搭建nacos,現(xiàn)在想要啟動(dòng),訪(fǎng)問(wèn)nacos頁(yè)面,訪(fǎng)問(wèn)不了,所以本文小編將給大家介紹nacos在liunx系統(tǒng)中啟動(dòng)成功,瀏覽器卻訪(fǎng)問(wèn)不了?全面的解決辦法,需要的朋友可以參考下2023-09-09

