Browse Source

!2 uos run ad and main page through redirect.html

chenliangyu 4 months ago
parent
commit
30d3f0e9ef

+ 24 - 4
Module/mod_chromium/CModTools.cpp

@@ -204,6 +204,8 @@ namespace Chromium {
 			errPagePath.Append("homePageErr.html");
 		else if (errType._to_integral() == ERR_PAGE_REASON::startup)
 			errPagePath.Append("startPage.html");
+		else if (errType._to_integral() == ERR_PAGE_REASON::redirect)
+			errPagePath.Append("redirect.html");
 		else
 			errPagePath.Append("entityCheck.html");
 
@@ -588,6 +590,7 @@ namespace Chromium {
 	std::string CModTools::generateCommonPage(std::string url, std::string name, int width, int height, int point_x, int point_y, int top)
 	{
 #if defined(RVC_OS_LINUX)
+		std::string dstUrl = url;
 		CSimpleStringA strBasePath(true);
 		this->m_pEntity->GetFunction()->GetPath("BaseDir", strBasePath);
 		std::string strPath(strBasePath.GetData());
@@ -636,7 +639,11 @@ namespace Chromium {
 			CSimpleStringA strUOSBrowserPath(execute_oldbrowser_path.c_str());
 			strParams.Append(" --new-window --no-first-run --disable-popup-blocking --disable-notifications --disable-desktop-notifications ");
 			if (ConfigManager::getInstance().m_extension_withTerminal)
+			{
 				strParams.Append(" --load-extension=").Append(ConfigManager::getInstance().m_extensionPath.c_str());
+				auto redirctUrlRet = getErrUrl(ERR_PAGE_REASON::redirect);
+				dstUrl = "\"" + redirctUrlRet.second + "?url=" + url + "\"";
+			}
 			strParams.Append(" --allow-running-insecure-content --disable-infobars --disable-suggestions-service --disable-save-password-bubble --disable-component-update");
 			
 			
@@ -653,7 +660,7 @@ namespace Chromium {
 			CSimpleStringA usrDataPath(tempPath);
 			usrDataPath.Append(SPLIT_SLASH_STR).Append("UOSBrowserConfig_").Append(name.c_str());
 			strParams.Append(" --user-data-dir=").Append(usrDataPath);
-			strParams.Append(" --app=").Append(url.c_str());
+			strParams.Append(" --app=").Append(dstUrl.c_str());
 			strUOSBrowserPath.Append(strParams);
 			return strUOSBrowserPath.GetData();
 		}
@@ -664,7 +671,11 @@ namespace Chromium {
 			CSimpleStringA strUOSBrowserPath(execute_newbrowser_path.c_str());
 			strParams.Append(" --allow-running-insecure-content --new-window");
 			if (ConfigManager::getInstance().m_extension_withTerminal)
+			{
 				strParams.Append(" --load-extension=").Append(ConfigManager::getInstance().m_extensionPath.c_str());
+				auto redirctUrlRet = getErrUrl(ERR_PAGE_REASON::redirect);
+				dstUrl = "\"" + redirctUrlRet.second + "?url=" + url + "\"";
+			}
 			CSimpleStringA tempPath;
 			this->m_pEntity->GetFunction()->GetPath("Temp", tempPath);
 			CSimpleStringA cachePath(tempPath);
@@ -677,7 +688,7 @@ namespace Chromium {
 			CSimpleStringA usrDataPath(tempPath);
 			usrDataPath.Append(SPLIT_SLASH_STR).Append("BrowserConfig_").Append(name.c_str());
 			strParams.Append(" --user-data-dir=").Append(usrDataPath);
-			strParams.Append(" --app=").Append(url.c_str());
+			strParams.Append(" --app=").Append(dstUrl.c_str());
 			strUOSBrowserPath.Append(strParams);
 			return strUOSBrowserPath.GetData();
 		}
@@ -751,6 +762,7 @@ namespace Chromium {
 #if defined(RVC_OS_LINUX)
     std::string CModTools::generateBrowserCMDForEverything(const std::string& url, int pageType, bool ignoreSecurity)
     {
+		std::string dstUrl = url;
         CSimpleStringA strBasePath(true);
         this->m_pEntity->GetFunction()->GetPath("BaseDir", strBasePath);
         std::string strPath(strBasePath.GetData());
@@ -790,7 +802,11 @@ namespace Chromium {
 			if (!ConfigManager::getInstance().m_extension_debugOpen)
 				strParams.Append(" --kiosk");
 			if (ConfigManager::getInstance().m_extension_withTerminal)
+			{
 				strParams.Append(" --load-extension=").Append(ConfigManager::getInstance().m_extensionPath.c_str());
+				auto redirctUrlRet = getErrUrl(ERR_PAGE_REASON::redirect);
+				dstUrl = "\"" + redirctUrlRet.second + "?url=" + url + "\"";
+			}
 			if (pageType == 0 || pageType == 2 || pageType == 3) {
 
 			} else if (pageType == 1) {
@@ -835,7 +851,7 @@ namespace Chromium {
             }
             strParams.Append(" --user-data-dir=").Append(usrDataPath);
             strParams.Append(" ");
-            strParams.Append(url.c_str());
+            strParams.Append(dstUrl.c_str());
             strUOSBrowserPath.Append(strParams);
 
             if (pageType == 0) {
@@ -854,7 +870,11 @@ namespace Chromium {
 			if (!ConfigManager::getInstance().m_extension_debugOpen)
 				strParams.Append(" --kiosk");
 			if (ConfigManager::getInstance().m_extension_withTerminal)
+			{
 				strParams.Append(" --load-extension=").Append(ConfigManager::getInstance().m_extensionPath.c_str());
+				auto redirctUrlRet = getErrUrl(ERR_PAGE_REASON::redirect);
+				dstUrl = "\"" + redirctUrlRet.second + "?url=" + url + "\"";
+			}
             if (pageType == 0 || pageType == 2 || pageType == 3) {
 
             } else if (pageType == 1) {
@@ -899,7 +919,7 @@ namespace Chromium {
             }
             strParams.Append(" --user-data-dir=").Append(usrDataPath);
             strParams.Append(" ");
-            strParams.Append(url.c_str());
+            strParams.Append(dstUrl.c_str());
             strUOSBrowserPath.Append(strParams);
 
             if (pageType == 0) {

+ 1 - 1
Module/mod_chromium/CModTools.h

@@ -21,7 +21,7 @@ namespace Chromium {
 
 	BETTER_ENUM(ERR_PAGE_REASON, int, CameraConfig, CardStoreIsBusy, MachineTypeError, TerminalManagerKickOut,
 		TerminalManagerOff, breakdown, warnPrompt, disabled, jobuncomplete, ErrNotify, main, Ad, extend, OutsideRequest, SpecialPageFromOtherEntity
-		, Install, startup, performance_monitor, audioErr)
+		, Install, startup, performance_monitor, audioErr, redirect)
 
 		BETTER_ENUM(PAGE_TYPE, int, Deploy, CameraConfig, TerminalManager, errPage, Ad, slv, init, TradeManager
 			, breakdown, extend, CardStoreIsBusy, Install, startup, performance_monitor)

+ 19 - 0
addin/res/ManagerDesktop/redirect.html

@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <!-- 1. 从 URL 参数中提取目标地址 -->
+    <script>
+        const params = new URLSearchParams(window.location.search);
+        const targetUrl = params.get('url'); // 例如 ?url=http://oa.cmbchina.com
+        if (targetUrl) {
+            // 2. 延迟 5 秒后通过 meta 刷新跳转(无界面闪烁)
+            setTimeout(() => {
+                window.location.href = targetUrl + (targetUrl.includes('?') ? '&' : '?') + 'from_redirect=' + Date.now();
+            }, 5000);
+        }
+    </script>
+    <!-- 3. 确保页面完全空白 -->
+    <style>html, body { display: none; }</style>
+</head>
+<body></body>
+</html>

+ 55 - 6
addin/res/VTMModifyHeaders/background.js

@@ -8,6 +8,8 @@
  */
 
 
+//C:\Program Files\Google\Chrome\Application\chrome.exe --auto-open-devtools-for-tabs --load-extension=D:\mayun\LR04.02_RVCTerminalPlus\addin\res\VTMModifyHeaders "file:///D:/redirect.html?url=http://oa.cmbchina.com"
+
 "use strict";
 
 let config;
@@ -17,12 +19,17 @@ const isChrome = true;
 let config_read_type = 'websocket';//local,file,websocket,http
 const wsUrl = 'ws://127.0.0.1:9002?name=vtm_modify_header';
 let socket = null;
+let isExtensionReady = false;
+
+function delay(ms) {
+  return new Promise(resolve => setTimeout(resolve, ms));
+}
+
+
 
 loadConfigurationFromLocalStorage();
 
 addListener();
-// listen for change in configuration or start/stop
-chrome.runtime.onMessage.addListener(notify);
 
 function connectWebSocket(callback_function) {
   let socket = null; // 初始化 socket 变量
@@ -79,6 +86,23 @@ function connectWebSocket(callback_function) {
   };
 }
 
+function extractUrlFromFileProtocol(fileUrl) {
+    try {
+        const urlObj = new URL(fileUrl);
+        const params = new URLSearchParams(urlObj.search);
+        const targetUrl = params.get('url');
+
+        // 验证提取的 URL 是否合法
+        if (targetUrl && (targetUrl.startsWith('http://') || targetUrl.startsWith('https://'))) {
+            return targetUrl;
+        }
+    } catch (e) {
+        console.error('Failed to parse file:// URL:', e);
+    }
+    return null;
+}
+
+
 
 function loadConfigurationFromLocalStorage() {
   if (config_read_type == 'local') {
@@ -86,8 +110,6 @@ function loadConfigurationFromLocalStorage() {
     headers.push({ url_contains: "", action: "add", header_name: "terminalno", header_value: "7555980178", comment: "test", apply_on: "req", status: "on" });
     config = { format_version: "1.1", target_page: "", headers: headers, debug_mode: true, use_url_excepts: false };
     log("current new config" + JSON.stringify(config));
-
-
     storeInBrowserStorage({ config: JSON.stringify(config) });
     started = 'on';
   }
@@ -113,8 +135,32 @@ function loadConfigurationFromLocalStorage() {
       let data = JSON.parse(dataStr);
       log("current new config:" + JSON.stringify(data));
       config = data
-      storeInBrowserStorage({ config: JSON.stringify(data) });
-      started = 'on';
+        storeInBrowserStorage({ config: JSON.stringify(data) });
+        started = 'on';
+
+      chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
+        if (tabs[0]) {
+          const currentUrl = tabs[0].url; // 当前标签页的 URL
+            console.log("当前 URL:", currentUrl);
+            // 规则1: 如果是 file:// 开头,提取 url= 参数并跳转
+            if (currentUrl.startsWith('file:///')) {
+                console.log("begin with file:///");
+                const urlParam = extractUrlFromFileProtocol(currentUrl);           
+                if (urlParam) {
+                    console.log("重载为:", urlParam);
+                    chrome.tabs.update(tabs[0].id, { url: urlParam });
+                    
+                }
+            }
+        }
+      });
+
+
+/*
+      chrome.tabs.query({ active: true }, (tabs) => {
+        chrome.tabs.update(tabs[0].id, { url: "https://oa.cmbchina.com" });
+      });
+      */
     });
   }
 }
@@ -165,6 +211,9 @@ function log(message) {
 * Rewrite the request header (add , modify or delete)
 *
 */
+
+
+
 function rewriteRequestHeader(e) {
   if (config.debug_mode) 
     log("Start modify request headers for url " + e.url + "use_url_excepts:" + config.use_url_excepts)

+ 5 - 2
addin/res/VTMModifyHeaders/manifest.json

@@ -10,12 +10,15 @@
     "webRequest",
     "webRequestBlocking",
     "<all_urls>",
-    "file:///D:/Run/runinfo/runcfg/config.json"
+    "extraHeaders",
+    "webNavigation",
+    "tabs"
   ],
   "background": {
     "scripts": [
       "background.js"
-    ]
+    ],
+    "persistent": true
   },
   "browser_action": {
     "default_title": "VTModifyHeaders"