2015-06-25 5 views
5

Я даже не знаю, если это то, что мне нужно, но через несколько дней после этого MSDN Forum post без ответов вообще я думал, что я бы сделал снимок в формате SO.Как установить политику безопасности контента в универсальных приложениях Windows

Моя проблема: У меня есть много Windows, 8,1 и Windows Phone 8,1 HTML/Javascripts приложения, которые имеют немного <script> предложение в <head> каждой HTML-страницы. Я начал мигрировать свои приложения в Windows 10 в одном приложении Универсальный Windows, но я получаю следующее сообщение об ошибке:

CSP14312: Resource violated directive 'script-src ms-appx: data: 'unsafe-eval'' in Host Defined Policy: inline script. Resource will be blocked 

и, конечно, ничто не выполняется ... я отсутствующий что-нибудь?

редактировать: Чтобы Репрографический просто создать пустой для Windows Универсальное приложение с VS2015 RC и добавить

<script> 
    console.log('hello'); 
</script> 

перед головка тег закрывает

+0

Можете ли вы предоставить минимальный репрограмм? Это должно работать в целом. –

+0

может кто-нибудь объяснить, почему голос? – sebagomez

ответ

3

Роб это право, по умолчанию вы не можете иметь встроенный скрипт в мс-appx: /// протокола. Это протокол по умолчанию для приложения и имеет политику CSP по умолчанию, которая не позволяет встроенный скрипт.

Если вы действительно хотите использовать встроенный скрипт, вы можете перейти к контенту через ms-appx-web: /// протокол, где политика CSP по умолчанию отсутствует.

Единственное замечание состоит в том, что у вас нет доступа к некоторым возможностям в этом протоколе.

Единственная разница у меня за то, что сказал Роб, что вы, скорее всего, хотите установить Content Application URI Правило (ACUR) как этот

<uap:ApplicationContentUriRules> 
    <uap:Rule Type="include" Match ="ms-appx-web:///" WindowsRuntimeAccess="all"/> 
</uap:ApplicationContentUriRules> 

Для перехода к контенту вы можете установить StartPage в манифест к ms-appx-web: ///default.html

+0

Разве это не то, что предложил Роб? Несколько вопросов: 1) это совершенно новое для Win10? встроенные скрипты были в порядке в Win8.1 2) добавив, что вы предложили, я не могу получить доступ к 'Windows.Storage.ApplicationData.current', что ожидается? – sebagomez

+0

Извините, я обновил свой пример. Вам нужно добавить WindowsRuntimeAccess = "all" –

+1

Для Windows 8 вы можете использовать встроенный скрипт, но вы не смогли легко изменить innerHTML или динамически добавить некоторые типы атрибутов. В подавляющем большинстве мы слышали, что это была проблема. Таким образом, мы вытащили предыдущую модель безопасности SafeHTML и пошли со стандартом W3C CSP. Для локального контента единственным ограничением является встроенный скрипт. Мы создали модуль [NPM] (https://www.npmjs.com/package/noin), который поможет вам удалить встроенный скрипт, если вы не хотите делать это самостоятельно. Или вы можете просто использовать веб-протокол ms-apps-web: /// –

3

Я предполагаю, что это не ваш реальный случай использования, но в целом это зависит от конкретного сценария, будет ли он работать в локальном или веб-контексте. См. Features and restrictions by context. Если вы можете вытащить скрипт в локальный JS-файл, а не называть его из головы, я бы рекомендовал вместо этого использовать контексты безопасности приложения.

Ваш пример console.log работает, если он запускается из пакета (как вы заметили) или работает в веб-контексте. Вы можете принудительно запустить все приложение в веб-контексте, изменив стартовую страницу на ms-appx-web: ///default.html в манифесте.

Однако, поскольку приложение теперь находится в ограниченном веб-контексте, он не будет иметь доступ ко всем требованиям Windows Runtime. Вы можете открыть, что, добавив следующее в разделе Application в манифесте:

<uap:ApplicationContentUriRules> 
    <uap:Rule Type="include" Match ="ms-appx-web:///" WindowsRuntimeAccess="allowForWebOnly"/> 
</uap:ApplicationContentUriRules> 

Вам нужно будет открыть манифест в редакторе кода, а не в проявленном редакторе, чтобы изменить этот раздел.

Более подробно об ошибке см Кромка Console error and status codes ДОКУМЕНТАЦИЯ

+0

Я добавил то, что вы предложили, и это действительно сработало, но я не могу получить доступ к Windows Runtime :( – sebagomez

1

Вы смогли решить эту проблему?Я занимаюсь разработкой приложений и игр с использованием инфраструктуры Enyo и столкнулся с той же проблемой. Я был в состоянии разрешить его путем ввода строки, которые я обычно входить в теге в файле default.js на этом участке:

 if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) { 
      // TODO: This application has been newly launched. Initialize your application here. 
      initializemyapp(); 
      console.log("starting"); 
     } else { 
      // TODO: This application was suspended and then terminated. 
      // To create a smooth user experience, restore application state here so that it looks like the app never stopped running. 
     } 

Может быть, это немного поздно, но надеюсь, что это помогает.

+0

Я действительно решал это, делая то, что вы сделали ... Я добавил свой скрипт внутри js-файла и просто добавил ссылку на этот файл из html – sebagomez

Смежные вопросы