javascript - 关闭编译器: How to compile Chrome extension popup with background reference

标签 javascript google-chrome-extension google-closure-compiler

我正在使用 background.jspopup.js 脚本编写 Chrome 扩展程序。

background.js中:

function foo(){
  // Does something
}

popup.js中:

var backgroundPage = chrome.extension.getBackgroundPage();
backgroundPage.foo();

单独编译这两个文件当然会破坏 backgroundPage.foo() 引用,因为 foobackground.js 中的重命名方式不同。 和 popup.js

我知道解决此问题的“正确”方法是使用 window["foo"] = foo;background.js 导出 foo/code>,但我想尽可能避免导出(以使代码尽可能不可读)。

我尝试在一次运行中编译这两个脚本,并使用 --module 将它们拆分为单独的输出文件:

java -jar compiler.jar
  --compilation_level ADVANCED_OPTIMIZATIONS--js background.js popup.js
  --module backgroundMin:1
  --module popupMin:1:backgroundMin

毫不奇怪,这不起作用,因为编译器不知道 popup.js 中的 backgroundPagewindow 相同在background.js中。我尝试使用 @lends@borrows@memberOf 进行注释,但未能使其正常工作。

所以我的问题是:是否可以同时编译 background.jspopup.js 以便重命名 foo() - 无需导出 foo() 并且不破坏 popup.js 的引用?

最佳答案

使用 --module 选项可能是最好的路径 - 我想不出更好的路径。

为了使重命名正确工作,您应该能够扩展窗口类型:

/** @extends {Window} */
function MyWindow () {}

MyWindow.prototype = window.prototype;

/** @return {void} */
MyWindow.prototype.foo = function() {};

然后在background.js

var backgroundPage =
    /** @type {MyWindow} */ (chrome.extension.getBackgroundPage());
backgroundPage.foo();

类型转换应该在这里起作用,因为 MyWindow 扩展了 Window

所有这些都将放置在您的实际代码中。不要使用 extern,否则会阻止重命名。

关于javascript - 关闭编译器: How to compile Chrome extension popup with background reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21459249/

相关文章:

javascript - 关闭编译后有错误的代码

javascript - Google 关闭编译器 : remove dead code by setting CompilerOptions

javascript - 如何记录在Google Analytics上点击的Instagram图像?

javascript - 动态添加的类无法调用

javascript - Chrome 扩展/Bootstrap native 函数未定义? (Javascript)

google-chrome-extension - 使用 Chrome 扩展程序创建始终存在的侧边栏

javascript - Chrome 扩展 - 从网页中检索全局变量

javascript - 关闭编译器警告 `dangerous use of the global this object`?

Javascript OOP - 声明对象的方法

javascript - 将触摸事件仅绑定(bind)到类中的元素而不是其子元素