@@ -197,13 +197,43 @@ class MiniCssExtractPlugin {
197
197
Template . indent ( [
198
198
'promises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {' ,
199
199
Template . indent ( [
200
+
201
+ `var href = ${ linkHrefPath } ;` ,
202
+ `var fullhref = ${ mainTemplate . requireFn } .p + href;` ,
203
+ 'var existingLinkTags = document.getElementsByTagName("link");' ,
204
+ 'for(var i = 0; i < existingLinkTags.length; i++) {' ,
205
+ Template . indent ( [
206
+ 'var tag = existingLinkTags[i];' ,
207
+ 'var dataHref = tag.getAttribute("data-href") || tag.getAttribute("href");' ,
208
+ 'if(tag.rel === "stylesheet" && (dataHref === href || dataHref === fullhref)) return resolve();' ,
209
+ ] ) ,
210
+ '}' ,
211
+ 'var existingStyleTags = document.getElementsByTagName("style");' ,
212
+ 'for(var i = 0; i < existingStyleTags.length; i++) {' ,
213
+ Template . indent ( [
214
+ 'var tag = existingStyleTags[i];' ,
215
+ 'var dataHref = tag.getAttribute("data-href");' ,
216
+ 'if(dataHref === href || dataHref === fullhref) return resolve();' ,
217
+ ] ) ,
218
+ '}' ,
200
219
'var linkTag = document.createElement("link");' ,
201
220
'linkTag.rel = "stylesheet";' ,
221
+ 'linkTag.type = "text/css";' ,
202
222
'linkTag.onload = resolve;' ,
203
- 'linkTag.onerror = reject;' ,
204
- `linkTag.href = ${ mainTemplate . requireFn } .p + ${ linkHrefPath } ;` ,
223
+ 'linkTag.onerror = function(event) {' ,
224
+ Template . indent ( [
225
+ 'var request = event && event.target && event.target.src || fullhref;' ,
226
+ 'var err = new Error("Loading CSS chunk " + chunkId + " failed.\\n(" + request + ")");' ,
227
+ 'err.request = request;' ,
228
+ 'reject(err);' ,
229
+ ] ) ,
230
+ '};' ,
231
+ 'linkTag.href = fullhref;' ,
205
232
'var head = document.getElementsByTagName("head")[0];' ,
206
233
'head.appendChild(linkTag);' ,
234
+ ] ) ,
235
+ '}).then(function() {' ,
236
+ Template . indent ( [
207
237
'installedCssChunks[chunkId] = 0;' ,
208
238
] ) ,
209
239
'}));' ,
0 commit comments