【问题标题】:Browserify window object does not have globalsBrowserify 窗口对象没有全局变量
【发布时间】:2015-11-12 17:51:24
【问题描述】:

我需要添加表单的全局库:

window.Foo = function() {
  api = {};
  api.myVar = GLOBALS;
  return api;
}

使用外部脚本标记到我的项目。 GLOBALS 是从 window.FOO 依赖的另一个库添加到 window 的另一个变量。但是,当我在我的 Browserify 模块之一中访问 window 时,window.Foo 不存在。如果我尝试填充window.FOO,那么它的全局依赖项对它不可用。不过,我可以从 chrome 检查器中看到并使用 window.Foo。如何在模块中获取“真实”窗口对象?感谢您的帮助。

【问题讨论】:

    标签: javascript global-variables browserify


    【解决方案1】:

    您应该使用类似下面的模式,其中Foo 将附加到this 在所有环境中指向的任何对象。就像在浏览器中一样,它会将其添加到window

    (function(global) {
        global.Foo = function() {
             return {};
        }
    })(this);                  
    

    【讨论】:

    • 我稍微编辑了我的答案。这不起作用,因为window.Foo 还依赖于添加到窗口对象的全局变量。
    • 我测试了我的代码,它可以在浏览器和节点中运行。如果Foo 依赖于其他全局变量,请展开问题以获取更多信息。
    • 好的,我又更新了我的问题。希望这能解决所有问题。
    • 首先尝试使用console.log或任何其他api访问GLOBALS,以确认它是否正确加载,如果没有。可以有两种解决方案,因为它是一个客户端脚本,所以在 3 方脚本中用this 编辑/替换所有window 标识符。或者,第二个解决方案是在所有脚本之前执行/添加window = this; 脚本,使用它使所有其他脚本都可以使用 window 属性来引用 environment_global,而与任何环境无关。 Atlast 如果 GLOBALS 使用 DOM api,然后重写它,我认为没有其他方法。
    • 嗯,很遗憾,由于项目的性质,我无法重写。我想我只能放弃 browserify。
    【解决方案2】:

    想通了!该项目是一个 chrome 扩展,它正在被沙盒化。它与 Browserify 无关。

    【讨论】: