2017-11-06 1 views
0

Ich habe ein Browser-Addon mit Vuejs erstellt und Laravel Mix als Build-Prozess verwendet.Vuejs Browser-Erweiterung ohne Verwendung von 'unsafe-eval' in CSP

Alle meine Vue Templates sind in einzelnen Dateikomponenten und alles funktioniert absolut gut ... Bis ich "unsafe-eval" aus dem CSP in meinem Addon-Manifest entfernt habe. Firefox zeigt den Fehler:

Content Security Policy: The page's settings blocked the loading of a resource...Source: call to eval() or related function blocked by CSP.

Laravel Mix verwendet webpack und vue-Lader, war ich unter dem Eindruck, dass das Bündel dies schafft ist CSP-konform.

Ich habe den eingebauten JS angeschaut und es scheint keinen Anruf zu eval() zu geben, aber es gibt einen new Function() Anruf, den ich vermute, das Problem verursachend.

Fehle ich hier etwas Einfaches?

Antwort

1

Ich habe etwas Einfaches vermisst. Grundsätzlich

Ich brauchte webpack zu konfigurieren, dass die Laufzeit-Build von vue zu verwenden, etwa so:

mix.webpackConfig({ 
    resolve: { 
     alias: { 
      'vue$': 'vue/dist/vue.runtime.js' 
     } 
    } 
}); 

Dann vue instanziiert eine Wurzelkomponente ist eher als ein html-Element:

const root = require('my-root-component.vue'); 
const app = new Vue({ 
    el: '#app', 
    render: createElement => createElement(root), 
}); 

ich bekam Hier antworten: https://github.com/JeffreyWay/laravel-mix/issues/1052

+0

Standardmäßig wählt das Webpack nur die Laufzeitdatei aus. Zweitens tritt das Problem von eval sogar nach dem Definieren von Alias ​​für Laufzeit auf, da Webpack selbst die Methode 'eval' in try catch-Block verwendet. Es gibt ein offenes Problem dafür auf dem Webpack https://github.com/webpack/webpack/issues/5627 –

Verwandte Themen