2017-12-13 6 views
0

Ich versuche eine VSTS-Erweiterung zu schreiben, die einen Bericht generiert und einen Link zum Herunterladen der Daten als CSV-Datei bereitstellt.Inhaltssicherheitsrichtlinie, die das Herunterladen der generierten CSV-Datei von der VSTS-Erweiterung verhindert

Ich habe eine Zeichenfolge, die in eine CSV gespeichert wird:

$("#downloadReportButton".click(function() { 
    var csvString = getCSV() 
    var a = window.document.createElement('a') 
    a.href = 'data:attachment/csv,' + encodeURI(csvString) 
    a.download = 'test.csv' 
    document.body.appendChild(a) 
    a.click() 
    document.body.removeChild(a) 
)} 

Dies als in Chrome erwartet funktioniert, aber in Firefox wird die Aktion blockiert aufgrund der Content Security-Politik:

Inhaltssicherheitsrichtlinie: Die Einstellungen der Seite blockierten das Laden einer Ressource bei Daten: Anhang/csv,% 22Repository% 22,% 22 ... ("frame-src * tfs:").

Ich bin komplett neu in CSP, aber ich bin mir eigentlich nicht sicher, wo das Problem liegt. Gemäß der Rahmen src Politik (die zu meiner Inhalte anwenden scheint, die innerhalb eines iframe in VSTS gemacht wird), ich bin nicht sicher, warum dies blockiert:

mir
frame-src * tfs:; 

Es scheint, dass Rahmen- src wird ermöglicht *, mit anderen Worten: Inhalte erlaubt oder tfs:

ich sehe kein Problem mit script-src entweder:

script-src 'unsafe-inline' *.visualstudio.com https://cdn.vsassets.io *.ensighten.com *.microsoft.com *.google-analytics.com 'nonce-bbKMGh5rKZ1WElrqfMYBVQ=='; 

Hier ist die vollständige CSP, die ich aus den Header zu sehen:

Es scheint, als ob ich eine andere Methode verwenden sollte, um diese Aufgabe richtig zu erfüllen, als die Vorgehensweise, die ich gewählt habe, aber ich bin mir nicht sicher, wo ich von hier aus gehen soll. Präventives Schreien an einige Leute bei Microsoft, die großartig daran waren, das VSTS-Tag in SO zu überwachen und hilfreiche Informationen zu liefern, danke!

Antwort

0

Anstelle der Hacky Anker Lösung, sollte ich window.open mit dem codierten Inhalt gerade habe Aufruf:

$("#downloadReportButton".click(function() { 
    var csvString = getCSV() 
    var attachment = 'data:attachment/csv,' + encodeURI(csvString) 
    window.open(attachment) 
)} 

Ein großer Nachteil ist, dass ein Dateiname kann mein Wissen nicht eingestellt werden.

Verwandte Themen