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'; 

它的工作原理