diff --git a/package.json b/package.json index cfec243e..1195d03c 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "typings": "./out/index.d.ts", "scripts": { "test": "node ./node_modules/webpack/bin/webpack.js --config test/webpack.config.js", + "test-cross-origin": "node ./node_modules/webpack/bin/webpack.js --config test/webpack-cross-origin.config.js", "watch": "tsc -w -p tsconfig.json", "prepublishOnly": "tsc -p tsconfig.json" }, diff --git a/src/index.ts b/src/index.ts index b0fe2ab7..db132254 100644 --- a/src/index.ts +++ b/src/index.ts @@ -190,7 +190,16 @@ function createLoaderRules(languages: IFeatureDefinition[], features: IFeatureDe return { getWorkerUrl: function (moduleId, label) { var pathPrefix = ${pathPrefix}; - return (pathPrefix ? stripTrailingSlash(pathPrefix) + '/' : '') + paths[label]; + var result = (pathPrefix ? stripTrailingSlash(pathPrefix) + '/' : '') + paths[label]; + if (/^(http:)|(https:)|(file:)/.test(result)) { + var currentUrl = String(window.location); + var currentOrigin = currentUrl.substr(0, currentUrl.length - window.location.hash.length - window.location.search.length - window.location.pathname.length); + if (result.substring(0, currentOrigin.length) !== currentOrigin) { + var js = '/*' + label + '*/importScripts("' + result + '");'; + return 'data:text/javascript;charset=utf-8,' + encodeURIComponent(js); + } + } + return result; } }; })(${JSON.stringify(workerPaths, null, 2)})`, diff --git a/test/webpack-cross-origin.config.js b/test/webpack-cross-origin.config.js new file mode 100644 index 00000000..cbc3cf38 --- /dev/null +++ b/test/webpack-cross-origin.config.js @@ -0,0 +1,24 @@ +const MonacoWebpackPlugin = require('../out/index.js'); +const path = require('path'); + +const ASSET_PATH = 'http://localhost:8088/monaco-editor-webpack-plugin/test/dist/'; + +module.exports = { + mode: 'development', + entry: './index.js', + context: __dirname, + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'app.js', + publicPath: ASSET_PATH + }, + module: { + rules: [{ + test: /\.css$/, + use: ['style-loader', 'css-loader'] + }] + }, + plugins: [ + new MonacoWebpackPlugin() + ] +};