2013-11-18 3 views
40

Как я могу сделать что-то вроде этого: $sce.trustAsResourceUrl('URL_HERE');

Глобально, как в config() или run() функций основного приложения, так что любые плавающие фреймы, IMG SRC и т.д., которые URL_HERE будет работать?

Документы довольно бедны, объясняя это.

ответ

49

Я просто прочитал ваш комментарий из предыдущего ответа. Не уверен, что вы нашли решение. Кажется, вы ищете тип белого списка. Недавно я выяснил, что для $ sce есть функция whitelist.

Взятые из AngularJS docs for $sceDelegateProvider:

angular.module('myApp', []).config(function($sceDelegateProvider) { 
$sceDelegateProvider.resourceUrlWhitelist([ 
    // Allow same origin resource loads. 
    'self', 
    // Allow loading from our assets domain. Notice the difference between * and **. 
    'http://srv*.assets.example.com/**']); 
}) 

При этом вы можете сделать интерполяцию строки в этом фреймов, как:

<iframe ng-src="{{ 'http://srv1.assets.example.com/' + url_asset }}"></iframe> 
+5

Тем не менее интересно, что на самом деле разница между * и ** ... :( –

+0

* указывает содержимое текущего каталога и/** указывает содержимое этого каталога и всех его подкаталогов вниз – ahmednawazbutt

+0

@ahmednawazbutt, что неверно. Углеродный исходный код для поставщика sce здесь : https://github.com/angular/angular.js/blob/0822d34b10ea0371c260c80a1486a4d508ea5a91/src/ng/sce.js#L621 и говорит: * соответствует нулю или более вхождению любого символа кроме одного из следующих 6 символов: '': '',' '' '' '' '.'', '' '' ', '' '' 'и' ';'. ** соответствует нулю или больше вхождений * любого символа *. Таким образом, он не подходит для использования в схеме, домене и т. Д., Поскольку он будет соответствовать слишком много. –

65

Вы можете использовать фильтр. Они доступны по всему миру.

angular.module('myApp') 
    .filter('trustUrl', function ($sce) { 
    return function(url) { 
     return $sce.trustAsResourceUrl(url); 
    }; 
    }); 
<img ng-src={{ imageHref | trustUrl }}"> 
+4

Лучшее решение +1 –

+0

творческое использование фильтра очень приятно! – thenetimp

6

Я также любил решение фильтра; Однако, это не работает для меня, пока я не впрыскивается $ SCE правильно ...

app.filter('trustUrl', ['$sce', function ($sce) { 
    return function(url) { 
    return $sce.trustAsResourceUrl(url); 
    }; 
}]); 
+0

prob coz u минимизировали ваш код, используя бегун задачи, как хрюканье или глоток, или что-то - u need '$ sce' при минимизации – danday74

+0

Вы правы, я использую хрюканье и минимизацию. @ danday74 –

0

я использую для моих видео, хранящиеся на файловой системе:

app.config([ 
    '$sceDelegateProvider', 
    function($sceDelegateProvider) 
    { 
     $sceDelegateProvider.resourceUrlWhitelist(['self','filesystem:**']); 
    } 
]); 
Смежные вопросы