Mit Angular und Phonegap versuche ich, ein Video zu laden, das sich auf einem Remote-Server befindet, aber auf ein Problem gestoßen ist. In meinem JSON wird die URL als einfache HTTP-URL eingegeben.
"src" : "http://www.somesite.com/myvideo.mp4"
Meine Videovorlage
<video controls poster="img/poster.png">
<source ng-src="{{object.src}}" type="video/mp4"/>
</video>
Alle meine anderen Daten werden geladen, aber wenn ich auf meine Konsole schaue, wird folgende Fehlermeldung angezeigt:
Error: [$interpolate:interr] Can't interpolate: {{object.src}}
Error: [$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy. URL
Ich habe versucht, $compileProvider
meine Konfiguration einzurichten, aber mein Problem wurde dadurch nicht behoben.
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|tel):/);
Ich habe diesen Beitrag über domänenübergreifende Probleme gesehen , bin mir aber nicht sicher, wie ich das beheben soll oder in welche Richtung ich gehen soll. Irgendwelche Ideen? Jede Hilfe wird geschätzt
javascript
angularjs
cordova
mhartington
quelle
quelle
config.xml
Datei Ihrer Corodva veröffentlichen ?Antworten:
Dies ist die einzige Lösung, die für mich funktioniert hat:
Dann in einem Iframe:
http://plnkr.co/edit/tYq22VjwB10WmytQO9Pb?p=preview
quelle
Eine andere einfache Lösung besteht darin, einen Filter zu erstellen:
Geben Sie dann den Filter an in
ng-src
:quelle
Whitelist der Ressource mit $ sceDelegateProvider
Dies wird durch eine neue Sicherheitsrichtlinie verursacht, die in Angular 1.2 eingeführt wurde. Dies erschwert XSS, indem verhindert wird, dass sich ein Hacker auswählt (dh eine Anfrage an eine fremde URL stellt, die möglicherweise eine Nutzlast enthält).
Um dies richtig zu umgehen, müssen Sie die Domänen, die Sie zulassen möchten, wie folgt auf die Whitelist setzen:
Dieses Beispiel stammt aus der Dokumentation, die Sie hier lesen können:
https://docs.angularjs.org/api/ng/provider/$sceDelegateProvider
Stellen Sie sicher, dass Sie ngSanitize in Ihre App aufnehmen, damit dies funktioniert.
Deaktivieren der Funktion
Wenn Sie diese nützliche Funktion deaktivieren möchten und sicher sind, dass Ihre Daten sicher sind, können Sie ** einfach wie folgt zulassen:
quelle
resourceUrlWhitelist
es für Sie irgendwie nicht funktioniert, überprüfen Sie, ob Sie nach dem Domain-Namen keinen doppelten Schrägstrich haben (dies kann leicht passieren, wenn SieHatte hier das gleiche Problem. Ich musste mich an Youtube-Links binden. Was für mich als globale Lösung funktioniert hat, war, meiner Konfiguration Folgendes hinzuzufügen:
Das Hinzufügen von 'self' ist wichtig - andernfalls kann keine URL gebunden werden. Aus den eckigen Dokumenten
Damit kann ich mich jetzt direkt an einen beliebigen Youtube-Link binden.
Sie müssen den regulären Ausdruck natürlich an Ihre Bedürfnisse anpassen. Ich hoffe es hilft!
quelle
Die beste und einfachste Lösung zur Lösung dieses Problems besteht darin, Ihre Daten von dieser Funktion in der Steuerung zu übergeben.
In der HTML-Seite
quelle
Ich bin mit Videogular auf dasselbe Problem gestoßen. Bei der Verwendung von ng-src wurde Folgendes angezeigt:
Ich habe das Problem behoben, indem ich eine grundlegende Anweisung geschrieben habe:
Das HTML:
quelle
Wenn jemand nach einer TypeScript-Lösung sucht:
.ts-Datei (ggf. Variablen ändern):
Html:
quelle
Basierend auf der Fehlermeldung scheint Ihr Problem mit der Interpolation (normalerweise Ihrem Ausdruck
{{}}
) und nicht mit einem domänenübergreifenden Problem zu tun zu haben. Grundsätzlichng-src="{{object.src}}"
saugt.ng-src
wurde mitimg
Blick auf Tag IMO entworfen. Es ist möglicherweise nicht geeignet für<source>
. Siehe http://docs.angularjs.org/api/ng.directive:ngSrcWenn Sie erklären
<source src="somesite.com/myvideo.mp4"; type="video/mp4"/>
, wird es funktionieren, oder? (Beachten Sie, dass ichng-src
zugunsten von entfernesrc
) Wenn nicht, muss es zuerst behoben werden.Stellen Sie dann sicher, dass
{{object.src}}
der erwartete Wert ( außerhalb von<video>
) zurückgegeben wird:Wenn der erwartete Wert zurückgegeben wird, sollte die folgende Anweisung funktionieren:
quelle
ng-src
, kaputt zu sein (es ist nicht kaputt). Es hat mit der Sicherheitsrichtlinie von AngularJS zu tun: docs.angularjs.org/api/ng/service/$sceIch hatte diesen Fehler in Tests , die Direktive
templateUrl
war nicht vertrauenswürdig, sondern nur für die Spezifikation, also habe ich das Vorlagenverzeichnis hinzugefügt:Mein Hauptverzeichnis ist
app
.quelle