AngularJS ng-src в ie8: изображение не загружено и небезопасно добавлено в путь

Я просто хотел добавить изображение в свое приложение. Как и советовали, я использовал директиву ng-src:

<img ng-src="{{app.imgBig}}" alt="lorem ipsum" height="100" width="200" title="lorem ipsum" />

Он отлично работает в большинстве браузеров, но не в IE8. Изображение не загружается, поскольку вместо добавления абсолютного URL-адреса к имени файла оно возвращает относительный путь и добавляет перед ним «unsafe:».

На самом деле, он пытается загрузить:

небезопасно: img/test.jpg

Вместо:

http://url_of_my_site.com/img/test.jpg

Как вы знаете, это может быть связано с тем, что мне пришлось полностью отключить SCE для поддержки IE7:

$sceProvider.enabled(false);

Быстрое исправление состояло в том, чтобы создать константу базового пути и добавить ее в начало пути к изображению, но это не лучший вариант, поскольку приложение не должно зависеть от этого базового пути.

Есть идеи ?


person Fred    schedule 17.02.2014    source источник
comment
Судя по вашему описанию, если unsafe: все еще добавляется, даже с $sceProvider.enabled(false), похоже, что некоторое использование $sanitize все еще происходит. Может быть связано с текущей ошибкой AngularJS — проверьте github.com/angular/angular.js/ Issues/2901 для получения подробной информации и возможного исправления.   -  person Alex Osborn    schedule 18.02.2014
comment
Спасибо за вашу помощь, Алекс, но я попробовал исправить, но небезопасно: все еще существует: var myApp = angular.module('myApp', [], function ($compileProvider) { $compileProvider.imgSrcSanitizationWhitelist(/^\s*((https?|ftp|mailto):)|#/); });   -  person Fred    schedule 19.02.2014


Ответы (1)


Сам нашел решение:

  1. Получите текущий базовый URL благодаря объекту Location:

    var base_url = location.protocol + "//" + location.hostname + location.pathname;
    
  2. Укажите его как базовый путь к моему изображению в моем контроллере:

    imgBig: base_url + 'img/' + $scope.imgBig
    

Таким образом, unsafe: исчез, он работает во всех браузерах и не зависит от постоянного базового пути.

Надеюсь, это может помочь!

person Fred    schedule 18.02.2014
comment
Вы можете пометить этот ответ как принятый, поскольку он решил вашу проблему. Принятие собственного ответа допустимо в подобных случаях. Добро пожаловать в Stack Overflow! - person Alex Osborn; 19.02.2014