0

目前,我試圖將現有的Google Chrome擴展程序遷移到Typescript。 它在後臺腳本中使用'webextension-polyfill'庫,但是在npm中沒有這個庫的定義。無法爲'webextension-polyfill'庫獲取工作類型打字稿

我有以下的 'webextension-polyfill.d.ts' 文件

interface Window { 
    browser: typeof browser; 
} 

declare namespace browser.tabs { 
    export function create(createProperties: chrome.tabs.CreateProperties): Promise<void> 
    export function query(queryInfo: chrome.tabs.QueryInfo): Promise<chrome.tabs.Tab[]> 
} 

declare namespace browser.windows { 
    export function getAll(getInfo: chrome.windows.GetInfo): Promise<chrome.windows.Window[]> 
    export function create(window?: chrome.windows.CreateData): Promise<void> 
} 

我進口的樣子:

import 'webextension-polyfill'; 

而且代碼利用圖書館的樣子:

function createTab(url: string) { 
    browser.tabs.create({url: url}).then(...) 
} 

它編譯成功,但我得到運行時錯誤:

Uncaught TypeError: Cannot read property 'tabs' of undefined

在DevTools中,我可以看到瀏覽器是未定義的。

我在做什麼錯?

+0

請將[問題]置於主題上:包括[重複問題*的[mcve]]。對於Chrome擴展程序或Firefox Web擴展程序,幾乎總是需要包含* manifest.json *和一些背景,內容和/或彈出腳本/ HTML以及常用的網頁HTML /腳本。尋求調試幫助的問題(「爲什麼我的代碼不按我想要的方式工作?」)必須包括:(1)期望的行爲,(2)特定問題或錯誤,以及(3)重現它所需的最短代碼*在問題本身*。請參閱:[我可以在這裏詢問什麼主題?](/ help/on-topic)和[問]。 – Makyen

+0

@Makyen我不認爲這是相關的... –

+0

@akaSybe你所描述的錯誤實際上不是來自Typescript-這是瀏覽器告訴你,瀏覽器的價值沒有定義。 –

回答

0

我找到了解決方案。

也就是說模塊定義的運用工作示例:

webextension-polyfill.d.ts

declare namespace browser.tabs { 
    export function create(tabInfo: chrome.tabs.CreateProperties): Promise<void> 
    export function query(queryInfo: chrome.tabs.QueryInfo): Promise<chrome.tabs.Tab[]> 
} 

declare namespace browser.windows { 
    export function create(createInfo: chrome.windows.CreateData): Promise<void> 
    export function getAll(getInfo: chrome.windows.GetInfo): Promise<chrome.windows.Window[]> 
} 

declare module 'webextension-polyfill' { 
    export = browser; 
} 

,現在我可以導入 'webextension-填充工具' 庫:

import * as browser from 'webextension-polyfill'; 

它的工作原理