后端post請求返回頁面,在另一個項目中請求過來會出現的問題

目錄

1.后端post請求返回頁面,跨域問題

一、核心問題:跨域(CORS)限制(最直接的技術障礙)

具體表現:

二、安全性問題:CSRF 攻擊風險被放大

原理與危害:

三、交互體驗與兼容性問題

1. 頁面渲染異常

2. 瀏覽器行為兼容性差異

四、設計邏輯錯位:違背 “前后端分離” 與 “跨項目交互” 的最佳實踐

正確的跨項目交互模式應滿足:

總結:問題根源與解決方案

2.為什么get請求返回頁面沒有問題

一、核心原因:GET 請求返回頁面符合瀏覽器 “導航式交互” 的原生邏輯

1. 直接 URL 跳轉(無跨域攔截)

2. 嵌入式渲染(如 iframe)

二、GET 請求的語義與跨域規則:天然適配 “資源獲取” 場景

1. 跨域規則對 GET 更寬松(針對導航 / 嵌入場景)

2. 無 “預檢請求(OPTIONS)” 的額外阻礙

三、“沒問題” 的邊界:GET 請求返回頁面并非絕對無風險

1. CSRF 風險(針對需身份認證的頁面)

2. URL 參數暴露風險

總結:GET 與 POST 跨項目返回頁面的核心差異


當后端通過 POST 請求直接返回頁面(而非 JSON/XML 等數據),且該接口被另一個獨立項目(跨項目 / 跨域場景)請求時,會面臨一系列兼容性、安全性和體驗層面的問題,核心根源在于 “頁面返回” 的設計初衷是服務于同項目內的前端渲染,而非跨項目的數據 / 資源交互。以下是具體問題拆解及原理分析:

1.后端post請求返回頁面,跨域問題

一、核心問題:跨域(CORS)限制(最直接的技術障礙)

跨項目請求本質是 “跨域請求”(只要兩個項目的?協議、域名、端口?有一個不同,即屬于跨域),而瀏覽器的?同源策略(Same-Origin Policy)?會嚴格限制跨域場景下的資源交互,尤其對 POST 請求 + 頁面返回的組合極不友好

具體表現:
  1. 預檢請求(OPTIONS)失敗
    若另一個項目的前端通過 AJAX/Fetch 發起跨域 POST 請求(目標是獲取后端返回的頁面),瀏覽器會先發送一次?OPTIONS 預檢請求,驗證目標后端是否允許當前域的跨域訪問。

    • 后端未配置 CORS 規則(如未返回?Access-Control-Allow-OriginAccess-Control-Allow-Methods?等響應頭),預檢請求會直接被瀏覽器攔截真實的 POST 請求根本不會發送,自然無法獲取頁面。
    • 即使后端配置了基礎 CORS,頁面返回的?Content-Type(通常是?text/html)也可能觸發瀏覽器的 “非簡單請求” 校驗,若未明確允許該類型,仍會攔截。
  2. 獲取頁面后無法正常渲染
    假設繞過預檢(如后端配置了寬松的 CORS),前端成功通過 AJAX 獲取到后端返回的 HTML 頁面源碼,也無法像 “同項目內跳轉” 那樣正常渲染:

    • 頁面中的?相對路徑資源(CSS/JS/ 圖片)會失效:例如頁面中?<link href="/css/style.css">?會被解析為 “當前前端項目的域名 + /css/style.css”,而非目標后端的域名,導致資源 404。
    • 無法觸發瀏覽器的 “頁面導航” 行為:AJAX 獲取的 HTML 只是字符串,需手動插入 DOM(如?document.body.innerHTML = 響應內容),但這會丟失瀏覽器默認的頁面加載流程(如?window.onload?事件、歷史記錄更新),且可能與當前前端項目的 DOM 結構沖突。

二、安全性問題:CSRF 攻擊風險被放大

后端通過 POST 請求返回頁面,通常隱含 “基于會話(Session)的身份認證”(如用戶登錄后返回個人中心頁面),而跨項目請求會讓?CSRF(跨站請求偽造)攻擊?的風險顯著提升。

原理與危害:
  1. 身份憑證泄露風險
    若另一個項目是惡意網站,它可通過誘導用戶點擊按鈕(發起跨域 POST 請求),利用用戶在目標后端的已登錄 Session Cookie(Cookie 默認隨跨域請求發送,除非設置?SameSite=Strict/Lax),讓目標后端誤以為是用戶本人操作,從而返回包含敏感信息的頁面(如訂單、個人信息)。

    • 雖然惡意網站無法直接通過 AJAX 讀取跨域響應(同源策略限制),但可通過其他手段(如頁面內容中的特定標記、定時任務檢測頁面加載狀態)間接獲取敏感信息。
  2. 后端認證邏輯失效
    頁面返回的設計通常依賴 “同項目內的身份校驗”(如前端攜帶 Token 放在請求頭),而跨項目請求可能跳過這些校驗(如惡意網站直接構造 POST 請求體),導致后端的認證邏輯被繞過,出現未授權訪問。

三、交互體驗與兼容性問題

即使技術上解決了跨域和安全問題,跨項目請求 “返回頁面” 的模式也會導致極差的用戶體驗和兼容性問題。

1. 頁面渲染異常
  • 資源加載混亂:如前所述,頁面中的相對路徑資源會指向當前前端項目的域名,而非目標后端,導致 CSS 失效、JS 報錯、圖片無法加載,頁面變成 “純文本亂碼”。
  • DOM 沖突:若目標頁面中的 JS 操作了?windowdocument?等全局對象(如?document.titlewindow.location),會直接干擾當前前端項目的正常運行(如覆蓋當前頁面標題、強制跳轉)。
2. 瀏覽器行為兼容性差異
  • 表單提交與頁面跳轉的沖突:若另一個項目通過?<form>?標簽發起跨域 POST 請求(目標是獲取頁面),瀏覽器會直接跳轉到目標后端的頁面,導致當前項目的頁面被替換(用戶體驗斷裂);而通過 AJAX 發起請求,又會面臨同源策略的限制,二者無法兼顧。
  • HTTP 狀態碼處理異常:若后端返回 4xx(如 401 未授權)、5xx(如 500 服務器錯誤)狀態碼并附帶錯誤頁面,跨項目請求無法像同項目內那樣正常捕獲狀態碼(瀏覽器可能直接攔截錯誤響應),導致前端無法判斷請求結果,無法給出友好的錯誤提示。

四、設計邏輯錯位:違背 “前后端分離” 與 “跨項目交互” 的最佳實踐

從架構設計角度看,“后端 POST 返回頁面” 本身是傳統服務端渲染(SSR)的模式(如 JSP、PHP、Thymeleaf),其核心是 “后端負責頁面生成 + 前端負責展示”,適用于同項目內的閉環交互;而跨項目交互的核心需求是 “數據 / 資源的交換”,而非 “頁面的直接獲取”,二者設計目標完全錯位。

正確的跨項目交互模式應滿足:
  • 數據層面交互:后端提供返回 JSON/XML 數據的接口(而非頁面),另一個項目的前端獲取數據后,用自己的頁面模板渲染(符合前后端分離思想)。
  • 資源層面交互:若需共享頁面,應通過?URL 跳轉(如?window.open("目標后端頁面地址"))讓用戶直接訪問目標項目,而非通過跨項目請求 “拉取” 頁面源碼。

總結:問題根源與解決方案

問題類型核心根源解決方案
跨域限制瀏覽器同源策略 + 后端未配置 CORS1. 后端接口改為返回 JSON 數據;
2. 配置正確的 CORS 規則(僅用于數據接口)
CSRF 風險跨域請求攜帶 Session Cookie + 身份校驗缺失1. 給 Cookie 設置?SameSite=Strict/Lax
2. 跨項目接口強制要求 Token 認證(如 JWT)
渲染與體驗問題頁面返回模式不適合跨項目交互1. 采用 “數據接口 + 前端自渲染” 模式;
2. 需共享頁面時直接引導用戶跳轉目標 URL
設計邏輯錯位SSR 模式用于跨項目場景統一跨項目交互標準:后端提供數據接口,前端負責頁面渲染

綜上,“后端 POST 請求返回頁面,被另一個項目請求” 是一種不符合跨項目交互設計原則的做法,會引發跨域、安全、體驗等多重問題,實際開發中應堅決避免,轉而采用 “數據接口 + 前端自渲染” 的標準模式。

2.為什么get請求返回頁面沒有問題

當后端通過?GET 請求返回頁面?時,看似 “沒問題”,本質是因為這種交互模式完全契合?瀏覽器原生的頁面導航邏輯?和?GET 請求的設計語義,規避了跨項目 POST 請求返回頁面時的核心矛盾(如跨域攔截、渲染沖突)。但需明確:“沒問題” 是相對的(僅針對 “跨項目獲取并渲染頁面” 這一場景),而非絕對安全或無任何限制。以下從底層邏輯拆解原因:

一、核心原因:GET 請求返回頁面符合瀏覽器 “導航式交互” 的原生邏輯

瀏覽器的核心能力之一是 “通過 URL 導航獲取并渲染頁面”,而?GET 請求是瀏覽器導航的默認方式(用戶輸入 URL、點擊鏈接、刷新頁面,本質都是發送 GET 請求獲取頁面)。當另一個項目需要跨項目獲取頁面時,本質是 “引導瀏覽器去目標后端的 URL 上獲取頁面”,這完全復用了瀏覽器的原生能力,自然不會出現 POST 場景下的 “技術卡點”。

具體表現為兩種常見且無沖突的跨項目交互方式:

1. 直接 URL 跳轉(無跨域攔截)

另一個項目的前端無需通過 AJAX/Fetch 發起請求,只需通過?頁面跳轉?引導用戶訪問目標后端的 GET 接口 URL(如?window.location.href = "https://目標后端.com/page"?或?<a href="https://目標后端.com/page">訪問頁面</a>)。

  • 此時請求由?瀏覽器直接發起(而非前端 JS 發起),完全不受 “同源策略” 的跨域攔截限制 —— 因為同源策略的核心是 “限制前端腳本(如 AJAX)跨域讀取數據”,而 “瀏覽器主動導航到新 URL” 是用戶可感知的行為,屬于瀏覽器允許的原生操作。
  • 后端返回的 HTML 頁面會被瀏覽器直接解析渲染(替換當前頁面或在新標簽頁打開),頁面中的相對路徑資源(CSS/JS/ 圖片)會自動拼接 “目標后端的域名”(如?/css/style.css?會解析為?https://目標后端.com/css/style.css),不會出現 POST 場景下 “資源 404” 的問題。
2. 嵌入式渲染(如 iframe)

若另一個項目需要在自身頁面內嵌入目標后端的頁面(如用?<iframe src="https://目標后端.com/page">),本質也是瀏覽器向目標 URL 發送 GET 請求獲取頁面,再將 HTML 渲染到 iframe 容器中。

  • 這種方式同樣復用瀏覽器原生的資源加載邏輯:iframe 會作為獨立的 “微型瀏覽器環境”,自動處理目標頁面的資源加載(相對路徑正常解析)、JS 執行(受 iframe 沙箱限制,但基礎渲染無問題),無需前端手動處理 DOM 插入,避免了 POST 場景下 “渲染沖突” 的問題。

二、GET 請求的語義與跨域規則:天然適配 “資源獲取” 場景

HTTP 協議對 GET 和 POST 的語義定義有明確區分:

  • GET:語義是 “獲取資源”(如獲取頁面、圖片、數據),請求參數拼接在 URL 中,無 “副作用”(理論上不修改服務器數據);
  • POST:語義是 “提交數據”(如提交表單、創建資源),請求參數在請求體中,通常會產生 “副作用”(修改服務器數據)。

這種語義差異直接影響了瀏覽器的跨域規則和處理邏輯,使得 GET 請求返回頁面更適配跨項目場景:

1. 跨域規則對 GET 更寬松(針對導航 / 嵌入場景)

如前所述,瀏覽器對 “前端腳本發起的跨域 GET 請求”(如 AJAX 跨域 GET)仍會有同源策略限制(無法讀取響應內容),但對 “瀏覽器原生發起的跨域 GET 請求”(如 URL 跳轉、iframe 嵌入)完全允許 —— 因為這類請求的目標是 “獲取并渲染頁面”,而非 “讀取響應數據”,符合 GET “獲取資源” 的語義,也不會觸發瀏覽器對 “跨域數據泄露” 的擔憂。

而 POST 請求的語義是 “提交數據”,若允許前端腳本跨域發起 POST 并獲取頁面,可能導致 “未授權提交數據 + 讀取敏感頁面” 的雙重風險,因此瀏覽器對跨域 POST 的限制遠嚴于 GET。

2. 無 “預檢請求(OPTIONS)” 的額外阻礙

跨域 POST 請求若攜帶非簡單頭信息(如自定義 Token 頭)或請求體類型為?application/json,會觸發瀏覽器的?OPTIONS 預檢請求—— 只有預檢通過(后端返回允許跨域的響應頭),真實的 POST 請求才會發送。若后端未配置 CORS,POST 請求會直接失敗。

而通過瀏覽器導航 /iframe 發起的跨域 GET 請求,屬于 “簡單請求” 范疇(無復雜頭信息、請求體為空),無需發送預檢請求,直接與后端建立連接并獲取頁面,避免了 POST 場景下 “預檢失敗” 的核心障礙。

三、“沒問題” 的邊界:GET 請求返回頁面并非絕對無風險

需注意:“GET 請求返回頁面跨項目使用沒問題”,僅指 “頁面能正常獲取和渲染”,不代表不存在其他問題。實際場景中仍需關注兩類風險:

1. CSRF 風險(針對需身份認證的頁面)

若目標后端的 GET 接口返回 “需登錄才能訪問的頁面”(如用戶個人中心),且用戶已在目標后端登錄(瀏覽器保存了 Session Cookie),則另一個項目可通過?<iframe src="https://目標后端.com/user-center">?誘導用戶加載該頁面 —— 此時請求會攜帶用戶的 Session Cookie,后端會誤以為是用戶本人操作,返回包含敏感信息的頁面。

  • 雖然 iframe 受 “同源策略” 限制,另一個項目的 JS 無法讀取 iframe 內的頁面內容(避免敏感信息泄露),但仍可能通過 “頁面加載狀態”“iframe 高度變化” 等間接信息推斷用戶狀態,存在潛在風險。
  • 解決方案:給目標后端的 Cookie 設置?SameSite=Strict/Lax(阻止跨域請求攜帶 Cookie),或對敏感 GET 接口增加 Token 校驗(如 URL 中攜帶一次性 Token)。
2. URL 參數暴露風險

GET 請求的參數會拼接在 URL 中,若目標頁面需要通過參數傳遞敏感信息(如用戶 ID、訂單號),則參數會暴露在瀏覽器地址欄、歷史記錄、服務器日志中,存在信息泄露風險。

  • 而 POST 請求的參數在請求體中,相對更隱蔽(但仍需加密傳輸,如 HTTPS)。
  • 解決方案:敏感參數避免通過 GET URL 傳遞,或對參數進行加密處理。

總結:GET 與 POST 跨項目返回頁面的核心差異

對比維度GET 請求返回頁面(跨項目)POST 請求返回頁面(跨項目)
瀏覽器交互邏輯契合原生導航 / 嵌入邏輯,無渲染沖突依賴前端 JS 發起請求,易觸發渲染沖突(資源 404、DOM 沖突)
跨域限制瀏覽器導航 /iframe 無跨域攔截,無需預檢請求前端 JS 發起需預檢請求,未配置 CORS 則直接失敗
核心問題敏感參數暴露、CSRF(需身份認證場景)跨域攔截、渲染異常、預檢失敗、CSRF 風險更高
適用場景跨項目共享公開頁面(如幫助中心、公告頁)幾乎不適用(違背設計語義,問題多于收益)

綜上,GET 請求返回頁面跨項目使用 “沒問題”,本質是因為它復用了瀏覽器原生的導航能力,契合 GET “獲取資源” 的語義,規避了 POST 場景下的跨域攔截和渲染沖突。但需明確其風險邊界(CSRF、參數暴露),并在敏感場景中做好防護。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/99008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/99008.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/99008.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

APT32F0042F6P6 32位微控制器(MCU)單片機 APT愛普特微電子 芯片核心解析

一、核心解析&#xff1a;APT32F0042F6P6 是什么&#xff1f;1. 電子元器件類型APT32F0042F6P6 是愛普特微電子&#xff08;APTCHIP&#xff09; 推出的一款基于平頭哥THead內核的32位微控制器&#xff08;MCU&#xff09;。它采用TSSOP20封裝&#xff0c;是一款主打高性價比、…

SDR集成式收發器設計資源

一、AD9361 制造商產品編號&#xff1a;ADRV9361-Z7035 庫存編號&#xff1a;4032703 價格&#xff1a;CNY17,737.18 含稅 制造商產品編號&#xff1a;ADRV1CRR-BOB 庫存編號&#xff1a;4023108 價格&#xff1a;CNY3,145.87 含稅 制造商產品編號&#xff1a;ADRV1CRR-FMC 庫存…

將Varjo XR技術融入飛行模擬器,有效降低成本提升訓練效果

擴展現實(XR)飛行模擬器通過以較低的成本提供沉浸式和逼真的飛行環境&#xff0c;徹底改變了飛行訓練。本文將XR利用了最近的研究和數據進行綜合分析&#xff0c;評估飛行模擬器的有效性。此外&#xff0c;根據XR技術在航空訓練中的優勢和應用&#xff0c;評估XR飛行模擬器最終…

簡單的GIT操作學習記錄

Git 版本控制基本使用 1.Idea版本共計基本操作 公司使用Git作為代碼版本管理工具&#xff0c;平時使用非常頻繁這里簡單整理方便后續學習查看 1.1 merge未推送回滾 我們代碼merge操作后&#xff0c;并且沒有推送到遠端&#xff0c;本地項目發現有推送箭頭&#xff0c;可以使…

Spring Boot 與前端文件下載問題:大文件、斷點續傳與安全校驗

前言在企業級 Spring Boot 項目中&#xff0c;文件下載 是非常常見的功能場景&#xff1a;用戶下載報表、合同、發票 PDF下載圖片、音視頻資源系統導出大規模 Excel/CSV 數據然而&#xff0c;很多開發者在實現文件下載時&#xff0c;會遇到 下載失敗、文件損壞、性能瓶頸、斷點…

主板硬件研發基礎--HDMI工作原理

HDMI 接口 技術原理:HDMI 接口采用 TMDS 技術傳輸數字信號,不僅可以傳輸高清視頻信號,還能同時傳輸多聲道音頻信號。它支持 EDID 和 DDC2B,設備之間能夠自動協商并選擇最合適的視頻 / 音頻格式,實現 “即插即用” 功能。 接口類型:常見的有標準 HDMI 接口、Mini-HDMI 接口…

`Object.groupBy`將數組中的數據分到對象中

Object.groupBy 將一個對象或者數組的元素按照規則分組&#xff0c; 返回一個新對象&#xff0c; Object.groupBy(items, callbackFn) items&#xff1a;要分組的對象或數組&#xff08;通常是數組&#xff09;。 callbackFn(element, index, array)&#xff1a;回調函數&#…

反序列化漏洞詳解

用途限制聲明&#xff0c;本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具&#xff0c;嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果&#xff0c;作者及發布平臺不承擔任何責任。滲透測試涉及復雜技…

SQL數據分析原代碼--創建表與簡單查詢

CREATE TABLE&#xff1a;創建表&#xff0c;定義字段名、類型、注釋INSERT INTO&#xff1a;插入數據&#xff0c;支持單條或批量插入SELECT&#xff1a;查詢數據&#xff0c;*表示所有字段&#xff0c;AS可起別名&#xff0c;DISTINCT去重WHERE&#xff1a;條件篩選&#xff…

k8s查詢ServiceAccount有沒有列出 nodes 的權限

要檢查 ServiceAccount xxxxxx:default 是否具有列出 nodes 的權限&#xff0c;可以使用以下方法&#xff1a;1. **使用 kubectl auth can-i 命令**這是最直接的方法&#xff0c;可以檢查特定用戶或 ServiceAccount 是否具有特定權限&#xff1a;kubectl auth can-i list nodes…

調試Python程序時,控制臺一直打印SharedMemory read faild

from tkinter import filedialog filedialog.askopenfilename()在使用 tkinter 時&#xff0c;只要一處罰&#xff0c;控制臺就不停打印 SharedMemory read faild &#xff0c;雖然能用&#xff0c;但是大大的破壞了調試體驗&#xff0c;看到如下的提示&#xff0c;你說煩不煩&…

QRCode React 完全指南:現代化二維碼生成解決方案

前言 在數字化時代&#xff0c;二維碼已經成為連接線上線下的重要橋梁。無論是分享鏈接、支付碼、還是身份驗證&#xff0c;二維碼都扮演著不可或缺的角色。qrcode.react 是一個專門為 React 應用設計的二維碼生成庫&#xff0c;它能夠快速、靈活地生成各種樣式的二維碼&#…

xxe外部實體注入漏洞

https://owasp.org/www-project-top-ten XXE基礎 xxe外部實體注入 外部實體 xml&#xff08;用于傳輸和存儲數據&#xff09; html&#xff08;用于顯示數據&#xff09; 注入&#xff1a; SQL注入&#xff1a;用戶輸入數據被當做代碼執行 1輸入點 2.輸入數據可以結合到數據庫…

ros2獲取topic信息解析

ros2 ros_discovery_info topic 發布邏輯疑問&#xff1a; 在運行ros2 topic info -v /topic時&#xff0c;運行的是p3&#xff0c;如何與p1進程通訊的呢&#xff1f; 進程間理論上應該是IPC

FFmpeg合成mp4

本章主要介紹如何使用FFmpeg來將一個音頻文件和一個視頻文件合成一個MP4文件&#xff0c;以及在這個過程中我們如何對編碼過程進行封裝以及sample_rate 重采樣的過程&#xff08;由于提供的音頻文件的編碼類型為S16&#xff0c;所以我們需要轉化為MP4支持的FLTP浮點類型&#x…

第十九章 使用LAMP架構部署動態網站環境

第十九章 使用LAMP架構部署動態網站環境 文章目錄第十九章 使用LAMP架構部署動態網站環境一、安裝Httpd服務1、安裝httpd服務2、啟動httpd服務3、設置允許通過防火墻4、驗證http服務是否成功二、安裝Mariadb服務1、安裝Mariadb服務2、啟動Mariadb服務三、安裝PHP服務1、列出可用…

Selenium應用中的核心JavaScript操作技巧

Selenium是一款強大的瀏覽器自動化測試工具&#xff0c;其操作瀏覽器的能力部分來自于其內嵌的JavaScript執行引擎。這使得Selenium不僅能夠模擬用戶在瀏覽器中的各種操作&#xff0c;還能執行復雜的JavaScript腳本&#xff0c;以實現更為精細的控制。本文將探討如何通過Seleni…

《Linux 基礎指令實戰:新手入門的命令行操作核心教程(第一篇)》

前引&#xff1a;當你第一次面對 Linux 系統中那片閃爍著光標、只有黑白字符的終端界面時&#xff0c;或許會和很多初學者一樣感到些許茫然&#xff1a;這些由字母和符號組成的 “指令” 究竟該如何輸入&#xff1f;它們又能完成哪些神奇的操作&#xff1f;其實&#xff0c;Lin…

03.【Linux系統編程】基礎開發工具1(yum軟件安裝、vim編輯器、編輯器gcc/g++)

目錄 1. 軟件包管理器 1.1 什么是軟件包 1.2 Linux軟件生態 1.3 yum具體操作 1.3.1 查看軟件包 1.3.2 安裝軟件 1.3.3 卸載軟件 1.3.4 注意事項(測試網絡) 1.3.5 yum指令集總結 1.4 yum源目錄、安裝源 2. Vim編輯器的使用 2.1 Linux編輯器-vim使用 2.2 vim的基本概…

3DMAX自動材質開關插件AutoMaterial安裝和使用方法

3DMAX自動材質開關AutoMaterial&#xff0c;是一個3dMax腳本插件&#xff0c;它根據材質編輯器中當前活動的材質自動將材質應用于3dMax中新創建的對象&#xff0c;也適用于您復制的沒有材質的對象。它作為一個開關&#xff0c;可以綁定到按鈕或菜單來打開和關閉它。該工具的創建…