无法获得“webextension-polyfill' webextension-polyfill'图书馆

时间:2017-10-14 23:18:15

标签: google-chrome typescript google-chrome-extension firefox-webextensions

目前,我正在尝试将现有的Google Chrome扩展程序迁移到Typescript。 它使用&webextension-polyfill'后台脚本中的库,但是这个库的npm中没有定义。

我有以下' 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(...)
}

它成功编译,但我收到运行时错误:

  

未捕获的TypeError:无法读取属性&#39;标签&#39;未定义的

在DevTools中,我可以看到浏览器未定义。

我做错了什么?

1 个答案:

答案 0 :(得分: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-polyfill '库了:

import * as browser from 'webextension-polyfill';

它有效