2014-01-09 17 views
6

Ich analysierte eine Reihe von E-Mail-Nachrichten von einem Server, und ich möchte sie jetzt auf einer Webseite anzeigen. Ich habe ihre HTML-Inhalte und ich dachte, ein IFrame war der einfachste Weg, um die E-Mails so zu zeigen, wie sie gezeigt werden sollten.AngularJS und IFrame srcdoc

jedoch

<iframe srcdoc="{{ email.html }}" frameborder="0"></iframe> 

gibt mir die folgenden AngularJS Fehler:

Error: [$interpolate:interr] Can't interpolate: {{ email.html }} 
Error: [$sce:unsafe] Attempting to use an unsafe value in a safe context. 

Ich habe nach einem Weg, dies zu tun, versuchte $ sce als Test zu deaktivieren, aber das didn‘ t arbeiten entweder. Es ist nur ein Testprojekt und die Daten, die ich bekomme, sind sicher, ich brauche sie nur für einen POC.

tat ich das jetzt in meinem Controller:

var iframeDocument = document.querySelector('#myiframe').contentWindow.document; 
var content = $scope.email.html; 
iframeDocument.open('text/html', 'replace'); 
iframeDocument.write(content); 
iframeDocument.close(); 

das funktioniert, aber ich würde es immer noch durch Datenbindung bevorzugen, wenn eine Lösung gibt? Vielen Dank.

+0

Was ist email.html? – dandavis

+0

@dandavis Ein HTML-Dokument, das den tatsächlichen Inhalt der E-Mail enthält – cabaret

+0

versucht, das doc zuerst in eine Zeichenfolge umzuwandeln und schließlich srcDoc auf die HTML-Zeichenfolge zu setzen. – dandavis

Antwort

2

versuchen Sie ngSanitize als Abhängigkeit in Ihrer App hinzuzufügen.

hier haben Ihre weitere Informationen: http://docs.angularjs.org/api/ngSanitize

+0

This half mir. Ich hatte bereits angular-sanitize.js, auf die ich von meiner index.html referenzierte, aber ich musste sie als Abhängigkeit hinzufügen: angular.module ('app', ['ngSanitize']); –

6

einen Filter hinzufügen, um einen Wert zu machen vertraut:

angular.module('app').filter('toTrusted', ['$sce', function($sce) { 
    return function(text) { 
     return $sce.trustAsHtml(text); 
    }; 
}]); 

Und dann die Filter anwenden:

<iframe srcdoc="{{email.html | toTrusted}}" frameborder="0"></iframe> 

kompletter Code: http://jsfiddle.net/2bvktbLr/1/