如何使用webpack访问全局对象(window)?

20

我正在尝试使用ExternalInterface和webpack将ActionScript与JavaScript进行接口交互。

ExternalInterface只能调用全局对象(window)上的函数。如何在window(全局对象)上获取webpack模块的引用?

让我详细说明一下,我想要一个公司的命名空间(window.companyName),并为ExternalInterface提供一个接口:

window.companyName = { isReady: function() { ... },
                       driver1: function() { ... }, 
                       driver2: function() { ... } }

我的JavaScript会受到ActionScript的驱动。更根本的问题是,如何使用webpack设置全局变量,以便ExternalInterface可以看到它们(最好作为模块的导出项)?

我尝试了使用expose-loaderexports-loaderimports-loader,但都没有成功。expose-loader理论上是我需要的,但似乎不起作用。当我在我的模块中设置window.companyName并尝试在Chrome控制台中验证时,结果是undefined


你能分享一下你的加载器配置吗? - Ricardo Stuven
3个回答

7

你没有使用webpack-dev-server吗?

因为当我尝试运行webpack命令时,一切都正常。我通过在Chrome开发者工具中输入window.mySampleGlobalVariable来测试它。

然而,当我运行webpack-dev-server命令时,我的window变量变成了未定义。

我有这个示例应用程序:

app.js

window.mySampleGlobalVariable = 'TEST';
console.log('App is ready');

index.html

<!DOCTYPE HTML>
<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Webpack test</title>
    </head>

    <body>
        Webpack test
        <script src="bundle.js"></script>
    </body>

</html>

webpack.config.js

var path = require('path');

module.exports = {
    entry: './app.js',
    output: {
        filename: './bundle.js'
    },
    resolve: {
        extensions: ['', '.js']
    }
};

2
您的webpacked脚本可以访问window对象。Webpack并不会干扰它,因为包装函数只注入moduleexports__webpack_require__参数。
尝试编写一个只有一行访问window对象的脚本,然后查看输出脚本。
您的任务应该能够正常运行,除非执行永远无法到达它或某个加载器正在修改相关代码。

1
许多文件假定this对象指向window。我该怎么做才能实现这一点? - Abhinav Singi
1
(function(){ console.log(this == window);}).bind(window)(); (function(){console.log(this == window);}).bind(window)(); - Ricardo Stuven
webpack确实会干扰。我正在使用AMD模块。这些模块在webpack之外使用this作为全局对象可以正常工作,但一旦通过webpack运行就会失败。 - gman

1
如果您使用iframe来运行webpack-dev-server,则无法通过Chrome控制台访问变量。

13
可以的。您只需更改开发工具控制台的上下文,方法是更改默认为“<top frame>”的下拉菜单。参考链接:https://dev59.com/PHA75IYBdhLWcg3weY_u#8581276 - Johnny Oshika
我想购买一个 facepalm,Pat。 - Seth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接