CSS-файл WinJS из локального хранилища

Ответьте на этот вопрос: примените загруженный CSS к приложению MetroUI для Windows 8

Итак, да, Windows говорит, что из соображений безопасности вы не можете перейти к загруженному вами HTML-коду в это место и вы не можете запускать какой-либо исполняемый или потенциально исполняемый код, такой как скрипт или CSS. Он предназначен для таких медиа, как изображения или видео и тому подобное.

Но я очень, очень хочу использовать этот файл css из моего локального хранилища. Разве я не могу использовать метод execUnsafeLocalFunction обойти это ограничение вот так?:

MSApp.execUnsafeLocalFunction(function () {
    el["href"] = "ms-appdata:///local/style.css"
});

Он по-прежнему выдает Приложение не может загрузить удаленный веб-контент в локальном контексте. Я также пытался просто прочитать файл с помощью localFolder.getFileAsync и readText, но ничего не помогает. Неужели нет никакого способа обойти это?


person blub    schedule 25.06.2014    source источник


Ответы (1)


Я думаю, что нашел способ загрузить CSS.

Я протестировал приведенный ниже код, добавив файл css, который устанавливает красный цвет фона тела в папку локального хранилища.

Код считывает содержимое файла, создает тег стиля в заголовке и добавляет содержимое файла css в стиль.

var url = new Windows.Foundation.Uri(filename);

Windows.Storage.StorageFile.getFileFromApplicationUriAsync(url).then(function (file) {
    Windows.Storage.FileIO.readTextAsync(file).then(function(text) {

        var style = document.createElement("style");
        style.innerText = text;
        document.getElementsByTagName("head")[0].appendChild(style);

    });
});
person Sorskoot    schedule 25.06.2014
comment
Да, это именно тот способ динамической загрузки CSS: добавить его в документ в DOM. Вы можете сделать то же самое с файлами в пакете, создав элементы ‹link› в заголовке документа. Та же стратегия работает и для выгрузки CSS — удалите элемент ‹link› или ‹style› в DOM, и CSS выгрузится. - person Kraig Brockschmidt - MSFT; 25.06.2014
comment
Спасибо, getFileFromApplicationUriAsync сделал свое дело! По какой-то причине добавление к документу не сработало, но сработала замена cssText элемента ссылки. - person blub; 26.06.2014
comment
Это не работает для меня. Все загруженные стили недействительны в проводнике DOM. body { background-color: white;} отображается как неправильно отформатированный background-color:white: Кажется, что innerText неправильно обрабатывает \r\n в моем файле CSS. - person philk; 28.01.2015