18

Я пытаюсь связать ActionScript с JavaScript с помощью ExternalInterface и webpack.Как получить доступ к глобальному объекту (окну) с помощью webpack?

ExternalInterface может только спровоцировать (call) функции, найденные на глобальном объекте (window). Как я могу получить ссылку модуля webpack на window (глобальный объект)?

Позвольте мне уточнить некоторые, я хочу, чтобы иметь пространство имен для компании (window.companyName) с интерфейсом для ExternalInterface:

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

ActionScript, будет вожу JavaScript. Более фундаментальный вопрос заключается в том, как установить глобальные переменные с помощью webpack, чтобы ExternalInterface мог их видеть (желательно как экспорт модуля)?

Я пробовал использовать expose-loader, exports-loaderimports-loader не повезло. expose-loader идеально, что мне нужно, но, похоже, не работает. Когда я устанавливаю window.companyName в своих модулях и пытаюсь проверить его на моей хромированной консоли, это приводит к undefined.

+0

Вы можете поделиться своей конфигурацией загрузчика? –

ответ

1

Вы У есть доступ к объекту окна с вашего webpacked скрипт. Webpack не мешает ему, так как функция обертки вводит только module, exports и __webpack_require__ аргументы.

Попробуйте написать сценарий с одной строкой, открывающей оконный объект, а затем проверить выходной скрипт.

Ваше задание должно работать, если исполнение никогда не достигает его или какой-либо загрузчик меняет соответствующий код.

+1

Многие из файлов предполагают, что объект '' 'this''' указывает на' '' window'''.Как я могу это сделать? –

+0

(function() {console.log (это == окно);}). Bind (window)(); –

+0

webpack вмешивается. Я использую модули AMD. Эти модули работали вне webpack, используя 'this' как глобальный объект, но сбой выполнялся через webpack. – gman

7

Вы не используете webpack-dev-server?

Потому что, когда я пытаюсь выполнить команду webpack, все работает нормально. Я тестирую его, набрав window.mySampleGlobalVariable в инструментах разработчика Chrome.

BUT Когда я запустил команду webpack-dev-server, тогда моя переменная окна не определена.

У меня есть этот пример приложения:

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'] 
    } 
}; 
1

Если вы работаете webpack-dev-server с IFRAME вы не можете получить доступ к переменной с помощью консоли Chrome.

+11

Конечно, вы можете. Вам просто нужно изменить контекст консоли инструментов dev, изменив раскрывающийся список, который по умолчанию равен ''. Ссылка: http://stackoverflow.com/a/8581276/188740 –

+0

Я хотел бы купить * facepalm *, Pat. – Seth

+1

Ницца, спасибо @JohnnyOshika – lyjackal