Ich versuche, das src
Attribut eines Iframes aus einer Variablen festzulegen, und ich kann es nicht zum Laufen bringen ...
Das Markup:
<div class="col-xs-12" ng-controller="AppCtrl">
<ul class="">
<li ng-repeat="project in projects">
<a ng-click="setProject(project.id)" href="">{{project.url}}</a>
</li>
</ul>
<iframe ng-src="{{trustSrc(currentProject.url)}}">
Something wrong...
</iframe>
</div>
controller / app.js:
function AppCtrl ($scope) {
$scope.projects = {
1 : {
"id" : 1,
"name" : "Mela Sarkar",
"url" : "http://blabla.com",
"description" : "A professional portfolio site for McGill University professor Mela Sarkar."
},
2 : {
"id" : 2,
"name" : "Good Watching",
"url" : "http://goodwatching.com",
"description" : "Weekend experiment to help my mom decide what to watch."
}
};
$scope.setProject = function (id) {
$scope.currentProject = $scope.projects[id];
console.log( $scope.currentProject );
}
}
Mit diesem Code wird nichts in das src
Attribut des Iframes eingefügt . Es ist nur leer.
Update 1:
Ich habe $sce
die Abhängigkeit in AppCtrl eingefügt und $ sce.trustUrl () funktioniert jetzt ohne Fehler. Es wird jedoch zurückgegeben, TrustedValueHolderType
was ich nicht sicher bin, wie ich eine tatsächliche URL einfügen soll. Der gleiche Typ wird zurückgegeben, unabhängig davon, ob ich $ sce.trustUrl () in den Interpolationsklammern im Attribut verwende src="{{trustUrl(currentProjectUrl))}}"
oder ob ich dies innerhalb des Controllers mache, wenn ich den Wert von currentProjectUrl setze. Ich habe es sogar mit beiden versucht.
Update 2: Ich habe herausgefunden, wie die URL mit .toString () vom TrustedUrlHolder zurückgegeben werden kann. Dabei wird jedoch die Sicherheitswarnung ausgegeben, wenn ich versuche, sie an das src-Attribut zu übergeben.
Update 3: Es funktioniert, wenn ich trustAsResourceUrl () im Controller verwende und dies an eine Variable übergebe, die im Attribut ng-src verwendet wird:
$scope.setProject = function (id) {
$scope.currentProject = $scope.projects[id];
$scope.currentProjectUrl = $sce.trustAsResourceUrl($scope.currentProject.url);
console.log( $scope.currentProject );
console.log( $scope.currentProjectUrl );
}
Mein Problem scheint dadurch gelöst zu sein, obwohl ich nicht ganz sicher bin, warum.
quelle
trustAsResourceUrl
.trustAsResourceUrl
gibt eine zurück,$sce.RESOURCE_URL
die füriframe
/objects
while benötigt wird, undtrustAsUrl
gibt eine zurück,$sce.URL
die eine schwächere Art von Garantie darstellt (und derzeit gemäß Dokumentation nicht verwendet wird ).Es ist der
$sce
Dienst, der URLs mit externen Domänen blockiert. Es ist ein Dienst, der AngularJS Strict Contextual Escaping-Dienste bereitstellt, um Sicherheitslücken wie XSS, Clickjacking usw. zu verhindern. Er ist in Angular 1.2 standardmäßig aktiviert.Sie können es vollständig deaktivieren, es wird jedoch nicht empfohlen
Weitere Informationen finden Sie unter https://docs.angularjs.org/api/ng/service/$sce
quelle
auf diese Weise folge ich und seine Arbeit für mich gut, möge es für Sie funktionieren,
hier trustThisUrl ist nur Filter,
quelle
Bitte entfernen Sie den
trustSrc
Funktionsaufruf und versuchen Sie es erneut. {{trustSrc (currentProject.url)}} bis {{currentProject.url}}. Überprüfen Sie diesen Link http://plnkr.co/edit/caqS1jE9fpmMn5NofUve?p=previewGemäß der Angular Js 1.2-Dokumentation sollten Sie jedoch eine Funktion zum Abrufen der
src
URL schreiben . Schauen Sie sich den folgenden Code an.Vor:
Javascript
Html
Aus Sicherheitsgründen empfehlen sie jedoch die folgende Methode
Javascript
Html
quelle
ng-src
oder gebunden istsrc
. Angular 1.2 ab, kann man nur mit einem Ausdruck binden insrc
undng-src
und die Beratung ist eine URL aus dem Code unter Verwendung einer Funktion abrufen, wenn nötig.Vorlage auswählen; iframe controller, ng model update
index.html
iframe.html
Überprüfen Sie diesen Link: http://plnkr.co/edit/TGRj2o?p=preview
quelle
Sie benötigen auch
$sce.trustAsResourceUrl
oder es wird nicht die Website innerhalb des Iframes öffnen:quelle