第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在瀏覽器擴(kuò)展上下文中通過 TypeScript 訪問全局變量

如何在瀏覽器擴(kuò)展上下文中通過 TypeScript 訪問全局變量

jeck貓 2023-07-29 15:16:45
1. 問題我正在嘗試通過 TypeScript 從網(wǎng)站(隨機(jī) OGS 示例)訪問全局變量,以便從當(dāng)前棋盤游戲獲取數(shù)據(jù)。我對 TS 還很陌生,所以我也不確定如何輸入這個變量。全局變量本身實際上最初是在 TS 中創(chuàng)建的,但它具有無數(shù)的方法和屬性,因為有如此多的功能。因此,如果我要自己輸入它,我寧愿只輸入我需要的內(nèi)容(如果可能的話),或者以某種方式從某個包中導(dǎo)入它 - 我認(rèn)為作者沒有在任何地方公開發(fā)布它。與此同時,還有一個問題是全局變量是否默認(rèn)可用于瀏覽器擴(kuò)展,但情況可能并非如此。2.我一直在嘗試的事情所以,我一直在嘗試(我已經(jīng)嘗試過一百萬個其他變體......)做的是類似 * - inside?content.ts,它在OGS域內(nèi)運行 -:interface Goban {? bounded_height: number;}declare var goban: Goban;goban = window["global_goban"];console.log(goban.bounded_height.toString());我通常得到的錯誤是:Uncaught?ReferenceError:?goban?is?not?defined那么我錯過了什么?我必須創(chuàng)建聲明文件 (?.d.ts) 嗎?處理這種從第三方代碼導(dǎo)入全局變量的正確方法是什么?*:根據(jù)您嘗試處理window對象的方式,您可能必須添加"suppressImplicitAnyIndexErrors": true到您的對象中tsconfig.json,以便 TS 不會靜態(tài)地抱怨。3. 如何完全重現(xiàn)我的問題對于那些不熟悉如何開發(fā)瀏覽器擴(kuò)展的人來說,在 TS 中開始的最簡單方法是:創(chuàng)建一個簡單的manifest.json,例如:{ ????"manifest_version":?2, ????"name":?"Name", ????"version":?"0.0.2", ????"description":?"Description.", ????"content_scripts":?[ ????????{ ????????????"matches":?["*://*.online-go.com/*"], ????????????"js":?["content.js"] ????????} ????]}content.ts使用上一節(jié)中的代碼創(chuàng)建一個文件。編譯為 JS 與tsc.將manifest.json和content.js作為解壓的瀏覽器擴(kuò)展導(dǎo)入到瀏覽器中。加載隨機(jī) OGS 游戲并檢查它。
查看完整描述

2 回答

?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗 獲得超11個贊

1. 要點

內(nèi)容腳本無法直接訪問全局變量,它們在“隔離的世界”中工作。

然而,內(nèi)容腳本可以獲得 DOM 的“干凈”視圖。這意味著:

  • 內(nèi)容腳本無法看到頁面腳本定義的 JavaScript 變量。

web_accessible_resources但您仍然可以通過manifest.json.

2. 一種可能的解決方法

這是實現(xiàn)此目的的一種方法:

manifest.json:

{

? "manifest_version": 2,

? "name": "Name",

? "version": "0.0.2",

? "description": "Description.",

? "content_scripts": [

? ? {

? ? ? "matches": ["*://*.online-go.com/*"],

? ? ? "js": ["content.js"]

? ? }

? ],

? "web_accessible_resources": ["script.js"]

}

您可以將您可能需要的任何腳本添加到密鑰中,就像上面密鑰web_accessible_resources中使用的腳本一樣。matches您還可以使用通配符(例如 )*同時匹配多個。

您可能仍然需要將其添加到您的:compilerOptions內(nèi)部。tsconfig.json"suppressImplicitAnyIndexErrors": true

script.ts:

interface Goban {

? bounded_height: number;

}


declare var goban: Goban;


goban = window['global_goban'];


console.log(goban.bounded_height.toString());

content.ts:


const script = document.createElement('script');

script.src = chrome.extension.getURL('script.js');

document.head.append(script);

@types/chrome例如,您可能還需要通過npm i --save @types/chrome.

3. 更多資源

window.postMessage此外,內(nèi)容腳本可以使用和與頁面腳本進(jìn)行通信window.addEventListener

查看完整回答
反對 回復(fù) 2023-07-29
?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗 獲得超3個贊

如果您在 online-go.com 上的瀏覽器中打開控制臺,您可以輸入goban并看到它是全局可用的,就像這樣。因此,window.goban這將是訪問變量的方式。我會做類似的事情:


interface Goban {

? bounded_height: number;

}


const local_goban: Goban = window.goban;


console.log(local_goban.bounded_height.toString());

要不就


interface Goban {

? bounded_height: number;

}


const goban: Goban = window.goban;


console.log(goban.bounded_height.toString());

在您定義的代碼中g(shù)lobal_goban,但隨后繼續(xù)訪問goban. 確保變量名稱一致。


至于自動從該頁面輸入全局變量,我認(rèn)為這實際上是不可能的。Typescript 不能在瀏覽器中工作,它總是必須編譯為普通的 JS,所以你只需要手動編寫你想要的類型......你可以檢查像 Definely Typed 這樣的東西,但正如你提到的,如果他們沒有沒有發(fā)布任何公共存儲庫及其代碼/包,那么您可能無法找到任何內(nèi)容。


編輯:為了讓打字稿不抱怨窗口變量,您可能需要添加更多類似的內(nèi)容:


type Goban = {

? bounded_height: number;

}


declare global {

? ?var goban: Goban;

}

查看完整回答
反對 回復(fù) 2023-07-29
  • 2 回答
  • 0 關(guān)注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號