SpringBoot實戰項目之谷歌瀏覽器全屏效果實現
項目場景:
客戶需求文檔中,要求在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 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
先創建一個文本文件(後綴.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實戰項目之谷歌瀏覽器全屏效果實現的文章就介紹到這瞭,更多相關SpringBoot 全屏內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python實戰之整蠱神器合集加速友盡
- 使用VBS創建快捷方式的代碼
- 批處理位運算演示代碼
- vbs腳本和windows定時任務實現qq消息表情包定時發送功能
- bat文件與Vbs文件之間的常用操作(獲取用戶輸入,執行VBS文件)