Usando Angular e Phonegap, estou tentando carregar um vídeo que esteja em um servidor remoto, mas que deparei com um problema. No meu JSON, o URL é inserido como um URL HTTP simples.
"src" : "http://www.somesite.com/myvideo.mp4"
Meu modelo de vídeo
<video controls poster="img/poster.png">
<source ng-src="{{object.src}}" type="video/mp4"/>
</video>
Todos os meus outros dados são carregados, mas quando olho para o console, recebo este erro:
Error: [$interpolate:interr] Can't interpolate: {{object.src}}
Error: [$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy. URL
Tentei adicionar $compileProvider
minha configuração, mas ela não resolveu meu problema.
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|tel):/);
Vi este post sobre problemas entre domínios, mas não sei como resolver isso ou em que direção devo seguir. Alguma idéia? Qualquer ajuda é apreciada
javascript
angularjs
cordova
Mhartington
fonte
fonte
config.xml
arquivo do seu corodva ?Respostas:
Esta é a única solução que funcionou para mim:
Em seguida, em um iframe:
http://plnkr.co/edit/tYq22VjwB10WmytQO9Pb?p=preview
fonte
Outra solução simples é criar um filtro:
Em seguida, especifique o filtro em
ng-src
:fonte
Lista de permissões o recurso com $ sceDelegateProvider
Isso é causado por uma nova política de segurança implementada no Angular 1.2. Isso torna o XSS mais difícil, impedindo que um hacker faça discagem (ou seja, faça uma solicitação para uma URL estrangeira, potencialmente contendo uma carga útil).
Para contorná-lo corretamente, você precisa colocar na lista de permissões os domínios que deseja permitir, assim:
Este exemplo é retirado da documentação que você pode ler aqui:
https://docs.angularjs.org/api/ng/provider/$sceDelegateProvider
Certifique-se de incluir ngSanitize no seu aplicativo para fazer isso funcionar.
Desativando o recurso
Se você deseja desativar esse recurso útil e tem certeza de que seus dados estão seguros, basta permitir **, da seguinte forma:
fonte
resourceUrlWhitelist
alguma forma não funciona para você, verifique se você não tem barra dupla depois de nome de domínio (fácil para que isso aconteça quando concatenando coisas de variáveis e ambos têm barras)Teve o mesmo problema aqui. Eu precisava ligar para os links do Youtube. O que funcionou para mim, como solução global , foi adicionar o seguinte à minha configuração:
Adicionar 'self' é importante; caso contrário, não será possível vincular a qualquer URL. Dos documentos angulares
Com isso, agora posso vincular diretamente a qualquer link do YouTube.
Obviamente, você precisará personalizar o regex de acordo com suas necessidades. Espero que ajude!
fonte
A melhor e mais fácil solução para solucionar esse problema é passar seus dados dessa função no controlador.
Na página html
fonte
Encontrei o mesmo problema usando o Videogular. Eu estava recebendo o seguinte ao usar ng-src:
Corrigi o problema escrevendo uma diretiva básica:
O html:
fonte
Se alguém estiver procurando por uma solução TypeScript:
Arquivo .ts (altere variáveis, quando aplicável):
Html:
fonte
Com base na mensagem de erro, seu problema parece estar relacionado à interpolação (normalmente sua expressão
{{}}
), não a um problema entre domínios. É basicamente umang-src="{{object.src}}"
merda.ng-src
foi projetado com aimg
tag IMO em mente. Pode não ser apropriado para<source>
. Veja http://docs.angularjs.org/api/ng.directive:ngSrcSe você declarar
<source src="somesite.com/myvideo.mp4"; type="video/mp4"/>
, estará funcionando, certo? (note que eu removo ang-src
favor desrc
) Se não, deve ser corrigido primeiro.Em seguida, verifique se
{{object.src}}
retorna o valor esperado ( fora de<video>
):Se retornar o valor esperado, a seguinte instrução deverá estar funcionando:
fonte
ng-src
ser quebrado (não está quebrado). Tem a ver com a política de segurança do AngularJS: docs.angularjs.org/api/ng/service/$sceEu tive esse erro nos testes , a diretiva
templateUrl
não era confiável, mas apenas para as especificações, então adicionei o diretório do modelo:Meu diretório principal é
app
.fonte