2

这只是出于好奇,因为我以编写游戏为生,而不是 Web 应用程序。

Chrome 扩展 API(chrome.*家族)几乎完全由回调设置器组成的原因是什么?我说的是这个乍一看似乎滥用闭包的编程模型:

// do something with the Tab object of an activated tab
chrome.tabs.onActivated.addListener(function (activeInfo) {
    chrome.tabs.get(activeInfo.tabId, function(theTab) {
        foo(theTab);
    });
});

我习惯于让 getter 简单地返回请求的值,然后发现这很有趣。这是因为所有这些方法(例如getLastFocused这里)实际上只为浏览器引擎安排异步任务吗?

4

3 回答 3

4

我想知道类似的东西并找到了一个很好的解释,也许有人会像我一样发现这很有用:

[在 API 中使用回调的原因] 与 Google Chrome 的多进程架构有关。网页和 JavaScript 运行在不仅彼此分离的进程中,而且还与主浏览器进程分开运行,而主浏览器进程单独具有读取和写入本地文件系统的能力。这是 Google Chrome 的一项重要的安全性和稳定性功能。如果像这样的调用是同步的,您的扩展程序将不得不停止一切并等待浏览器进程响应请求,而用户可能一直在尝试与您的扩展程序的 UI 交互,而该 UI 已变得无响应。使用异步 API 更具挑战性,但它服务于最好的用户体验。

这是关于扩展 API 设计的视频的文字记录。

于 2015-07-19T01:36:02.627 回答
1

这是一个事件处理程序和一些异步操作的组合。此外,作用域在 javascript 中的工作方式可能有点不确定;使用闭包创建了一个可靠的范围,允许传递无法以其他方式完成的数据。

于 2012-09-29T17:25:02.823 回答
0

在我看来,chrome.*API 中的大多数方法都是异步的,原因之一是扩展通常必须处理用户交互。通常,任何异步 API 都会导致更好的应用程序响应能力。因此,chrome.*API 的开发人员只是提供了一种更简单的方法来编写高效的扩展,这不会减慢 Google Chrome 的速度,让用户感到失望。

于 2012-09-30T10:24:19.183 回答