我正在使用 Typescript 创建一个与Edge、Chrome和Firefox兼容的浏览器扩展。
我找到了一篇讨论可互操作的浏览器扩展的文章,其中包含此代码的示例:
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
Run Code Online (Sandbox Code Playgroud)
因此,我计划创建一个 Browser 类并根据扩展程序所在的浏览器初始化一个属性。类似于下面的代码:
export class Browser {
constructor() {}
public _browser: object = null;
get browser() : object {
if (typeof window.chrome !== 'undefined') {
this._browser = window.chrome;
}
if (typeof window.browser !== 'undefined') {
this._browser = window.browser;
}
return this._browser;
}
}
Run Code Online (Sandbox Code Playgroud)
我能够为 chrome 定义添加 @types/chrome ,这样我就不会抛出异常,但是,我找不到任何类型browser和msBrowser对象定义。或者我可以使用任何建议来执行此操作,而不会在 Typescript 中出现错误。
所以我的问题是我可以使用任何类型定义来支持browser ormsBrowser对象吗?
我试图处理具有属性的泛型类List<T>.但是在使用时检查属性时它不起作用IsAssignableFrom.
代码片段:
var type = model.GetType();
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
int colorIndex = 0;
foreach (var property in properties)
{
if (typeof(List<>).IsAssignableFrom(property.PropertyType))
{
//codes here
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?为什么它不将列表视为列表,即使它是列表?
我正在开发具有登录弹出窗口的 chrome 扩展程序。所以这个想法是为了让扩展工作,它需要用户登录,以便它可以与我们的 API 交互并获取/发布数据。
因此,我覆盖browserAction以检查用户是否已登录,如果未登录,则应显示登录弹出窗口。我的问题是当我再次单击扩展图标时,它会重新打开同一个登录弹出窗口。我如何防止这种情况发生,并且如果登录窗口打开,只应显示一个实例?
背景.js
// omitted some codes for brevity
chrome.browserAction.onClicked.addListener(function () {
// omitted some codes for brevity
chrome.windows.create({
'url': 'login.html',
'type': 'popup',
'width': width,
'height': height,
'left': (screen.width/2) - (width/2),
'top': (screen.height/2) - (height/2),
'focused': true
});
});
Run Code Online (Sandbox Code Playgroud)