TA的每日心情 | 开心 2024-7-27 20:27 |
---|
签到天数: 1 天 [LV.1]初来乍到
荣誉开发者
- 积分
- 11
|
发表于
2024-5-7 02:42:32
|
显示全部楼层
這個是前後台相呼應的版本~但是你只要在前台設置好~~這個後台可以每一個來自前台的請求~為的就是給前台最快速最準確的執行環境~前台只要專注於執行腳本的功能~特別是有設置多種異步函數的前台腳本~因為為了避免阻礙線程~通常都是要等頁面加載完畢後~才會開始取回函數~錯誤解析~錯誤處理~套用~~~這要一段時間~而假如我們把\這個任務交給後台處理~頁面開始加載的時候~~~後台收到來自前台的指令後~就會開始執行~為了確保準性~我做了一些比較特殊方式....這個以後再教你~~~~因為那是跨領域的~~腳本貓後台允許使用者自定義~所以很方便~以下是前後台相呼應~~
// 下面是你必須加入前台腳本的的部分
// 全局變量:首先,我們需要一個全局變量來記錄我們是否已經發送了請求,以及請求的細節是什麼。
// 這就像是一個記錄本,我們可以隨時查看和更新它。
// 這是一個全局變量,用來記錄請求的狀態
var globalRequestState = {
isRequesting: false, // 這告訴我們是否有請求正在進行
requestDetails: null // 這裡會存儲請求的細節
};
// 發送請求:接下來,我們需要一個函數來發送請求。當我們調用這個函數時,它會更新全局變量並向後台發送一個消息。
// 這個函數用來發送請求
function sendRequest(details) {
globalRequestState.isRequesting = true; // 標記我們正在發送請求
globalRequestState.requestDetails = details; // 記錄請求的細節
window.postMessage({ type: 'supportRequest', details: details }, '*'); // 向後台發送請求
}
//接收回應:我們還需要設置一個監聽器來接收後台的回應。當後台處理完我們的請求並回應時,這個監聽器會被觸發。
// 設置一個監聽器來接收後台的回應
window.addEventListener('message', function(event) {
if (event.origin !== '您後台腳本的來源') return; // 確保回應來自我們信任的後台
if (event.data.type === 'supportResponse') {
console.log('後台支援回應:', event.data.result); // 在控制台顯示後台的回應
globalRequestState.isRequesting = false; // 更新全局變量,表示請求已經完成
globalRequestState.requestDetails = null; // 清空請求細節
}
}, { once: true }); // 這個監聽器只會執行一次。
//自動化流程:最後,我們希望這個過程能夠自動化。這意味著每當頁面加載時,我們的腳本會自動檢查是否需要發送請求,並執行相應的操作
// 當頁面加載完成時,這個函數會被自動調用
window.addEventListener('DOMContentLoaded', (event) => {
console.log('頁面加載完成');
if (!globalRequestState.isRequesting) { // 如果沒有請求正在進行
sendRequest('需要的支援細節'); // 發送一個新的請求
}
});
// 這樣,當您的頁面加載或重新加載時,腳本會自動檢查是否需要發送請求,並根據需要執行。
// 這就是自動化的過程,您不需要手動做任何事情,腳本會為您處理一切。
// @background
// @match *://*/*
// @grant none
// ==/UserScript==
// 此函數用於在網頁上下文中執行JavaScript代碼。
function contentEval(source) {
// 如果源代碼是函數,將其轉換為立即執行函數表達式(IIFE)
if (typeof source === 'function') {
source = `(${source})();`;
}
// 創建一個script元素並將源代碼設置為其內容
const script = document.createElement('script');
script.setAttribute('type', 'application/javascript');
script.textContent = source;
// 將script元素添加到文檔中,然後立即移除,以執行源代碼
document.body.appendChild(script);
document.body.removeChild(script);
}
// 此函數根據URL路徑識別廣播者信息,用於頁面定位和操作。
function getBroadcaster() {
// 分割URL路徑
const pathArray = window.location.pathname.split('/');
// 檢查路徑格式並返回廣播者名稱
if (pathArray.length === 3 && pathArray[0] === '' && pathArray[1] !== '' && pathArray[2] === '') {
return pathArray[1];
} else if (pathArray.length === 4 && pathArray[0] === '' && pathArray[1] === 'b' && pathArray[2] !== '' && pathArray[3] === '') {
return pathArray[2];
}
return null;
}
// 監聽前台腳本發送的消息。
window.addEventListener('message', async (event) => {
// 確保回應來自我們信任的來源
if (event.origin !== '您後台腳本的來源') return;
// 處理ping請求
if (event.data.type === 'pingRequest') {
// 使用fetch API發送網絡請求
fetch(event.data.url).then(response => response.text()).then(result => {
// 將結果發送回前台腳本
event.source.postMessage({ type: 'pingResponse', result: result }, event.origin);
}).catch(error => {
// 處理錯誤並發送糾正後的數據
const correctedData = `根據錯誤信息糾正的數據: ${error.message}`;
event.source.postMessage({ type: 'correctedDataResponse', result: correctedData }, event.origin);
});
}
});
// 全局錯誤狀態追蹤變量
let globalErrorStatus = {
hasError: false, // 是否有錯誤發生
errorMessage: '' // 錯誤信息
}; |
|