Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2015, 14:19   #1
Taeranos
 
Регистрация: 18.11.2015
Сообщений: 8
По умолчанию Доступ к локальным файлам в WebBrowser из JS

Приветствую.

Имеется JS-приложение, которое необходимо запустить во встроенном в WF компоненте. К сожалению, кроме WebBrowser ничего использовать нельзя (иначе был бы CefSharp).
После настройки Localmachine_Lockdown в реестре приложение запускается, однако, невозможно получить доступ к файлам через AJAX (например, достать данные из файла JSON или загрузить AMD-компонент).
Компонент (W10, mshtml v11, Trident) выдает ошибку 2147024891 "Access Denied".

Вероятно, необходимо настроить WebBrowser через CoInternetSetFeatureEnabled, какие именно необходимы ключи, чтобы разрешить доступ к локальным файлам?

Вот текущий список опций:

PHP код:
SetBrowserFeatureControlKey("FEATURE_AJAX_CONNECTIONEVENTS"fileName1);
SetBrowserFeatureControlKey("FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION"fileName1);
SetBrowserFeatureControlKey("FEATURE_MANAGE_SCRIPT_CIRCULAR_REFS"fileName1);
SetBrowserFeatureControlKey("FEATURE_DOMSTORAGE "fileName1);
SetBrowserFeatureControlKey("FEATURE_GPU_RENDERING "fileName1);
SetBrowserFeatureControlKey("FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI  "fileName0);
SetBrowserFeatureControlKey("FEATURE_DISABLE_LEGACY_COMPRESSION"fileName1);
SetBrowserFeatureControlKey("FEATURE_LOCALMACHINE_LOCKDOWN"fileName0); //0
SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_OBJECT"fileName0);
SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_SCRIPT"fileName0);
SetBrowserFeatureControlKey("FEATURE_DISABLE_NAVIGATION_SOUNDS"fileName1);
SetBrowserFeatureControlKey("FEATURE_SCRIPTURL_MITIGATION"fileName1);
SetBrowserFeatureControlKey("FEATURE_SPELLCHECKING"fileName0);
SetBrowserFeatureControlKey("FEATURE_STATUS_BAR_THROTTLING"fileName1);
SetBrowserFeatureControlKey("FEATURE_TABBED_BROWSING"fileName1);
SetBrowserFeatureControlKey("FEATURE_VALIDATE_NAVIGATE_URL"fileName1);
SetBrowserFeatureControlKey("FEATURE_WEBOC_DOCUMENT_ZOOM"fileName1);
SetBrowserFeatureControlKey("FEATURE_WEBOC_POPUPMANAGEMENT"fileName0);
SetBrowserFeatureControlKey("FEATURE_WEBOC_MOVESIZECHILD"fileName1);
SetBrowserFeatureControlKey("FEATURE_ADDON_MANAGEMENT"fileName0);
SetBrowserFeatureControlKey("FEATURE_WEBSOCKET"fileName1);
SetBrowserFeatureControlKey("FEATURE_WINDOW_RESTRICTIONS "fileName0);
SetBrowserFeatureControlKey("FEATURE_XMLHTTP"fileName1);
SetBrowserFeatureControlKey("FEATURE_XDOMAINREQUEST"fileName1);
SetBrowserFeatureControlKey("FEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATION"fileName0);
SetBrowserFeatureControlKey("FEATURE_CROSS_DOMAIN_REDIRECT_MITIGATION"fileName1); 
Настройки пишутся в реестр до инициализации WebBrowser, fileName - имя процесса.
Через CoInternetSetFeatureEnabled настроены следующие опции:
PHP код:
InternetSetFeatureEnabled(URLSecurityZoneAPI.ZONE_ELEVATIONSetFeatureOn.PROCESSfalse);
InternetSetFeatureEnabled(URLSecurityZoneAPI.LOCALMACHINE_LOCKDOWNSetFeatureOn.PROCESSfalse);
InternetSetFeatureEnabled(URLSecurityZoneAPI.XMLHTTPSetFeatureOn.PROCESStrue); 
Заранее благодарен!

Последний раз редактировалось Taeranos; 18.11.2015 в 14:23.
Taeranos вне форума Ответить с цитированием
Старый 18.11.2015, 14:30   #2
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
невозможно получить доступ к файлам через AJAX
не понял, аджакс это не локальные файлы. К локальным может само приложение, а в браузер кинуть скриптом.
come-on вне форума Ответить с цитированием
Старый 18.11.2015, 14:43   #3
Taeranos
 
Регистрация: 18.11.2015
Сообщений: 8
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
не понял, аджакс это не локальные файлы. К локальным может само приложение, а в браузер кинуть скриптом.
Ajax это все, что угодно. Другое дело, что если локально, то нарушается песочница, по-дефолту не положено.
Желаемое поведение доступно, например, в Хроме (флаг --allow-file-access-from-files).
Taeranos вне форума Ответить с цитированием
Старый 18.11.2015, 14:46   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Может быть это поможет? https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
Я в какой-то похожей ситуации использовал (дописать <!-- saved from url=(0016)http://localhost --> в начало HTML файла)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.11.2015, 14:54   #5
Taeranos
 
Регистрация: 18.11.2015
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Может быть это поможет? https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
Я в какой-то похожей ситуации использовал (дописать <!-- saved from url=(0016)http://localhost --> в начало HTML файла)
Это первое, что было сделано. К сожалению, не помогает.
Taeranos вне форума Ответить с цитированием
Старый 18.11.2015, 15:26   #6
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

А как вы получаете доступ к файлам?
come-on вне форума Ответить с цитированием
Старый 18.11.2015, 15:34   #7
Taeranos
 
Регистрация: 18.11.2015
Сообщений: 8
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
А как вы получаете доступ к файлам?
В приложении используются xhr-запросы для загрузки модулей и JSON-файлов. В Forms приложение лежит где-то локально, индекс загружается сразу в WebBrowser.URL
Taeranos вне форума Ответить с цитированием
Старый 20.11.2015, 13:41   #8
Taeranos
 
Регистрация: 18.11.2015
Сообщений: 8
По умолчанию

В общем, в WebBrowser на десятой Windows нереально обойти политику блокировки, не помогли MotW, внесение в реестр необходимых FEATURES, подключение их для текущего процесса/приложения, изменение локальных политик безопасности, настроек безопасности и зон в Internet Explorer.

Потому было принято решение обойти саму проблему - если нельзя загружать модули через require.js, нельзя получать json-конфиги через $.ajax, то мы вообще не будем это делать. Все приложение собирается grunt'ом в 1-3 файла, json-конфиги и языковые файлы были вынесены в отдельные WCF-сервисы, доступ к которым осуществляется так же, как и к обычным дата-сервисам в этом приложениее (через windows.external байндинг объекта "ObjectForScripting"). Конечно, пришлось немного изменить загрузчик JS-приложения, чтобы он получал конфиги и языки так же, как и остальные данные (это все равно планировалось сделать позже).
Понятно, что это не позволяет подгружать компоненты "на лету", но в случае встроенного приложения это и не нужно - все файлы уже есть на диске. Так что онлайн-версия приложения билдится, как и раньше, по модулям, которые ассинхронно подгружаются по мере надобности, а встроенная версия собирается в 1 файл, который можно разместить в dll ресурсом и и передать в WebBrowser одной строкой, таким образом решив вопрос с деплоем.
Спасибо за участие!
Taeranos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сетевой доступ к файлам Sm1Le Работа с сетью в Delphi 3 21.10.2011 15:23
Поисковик по локальным файлам Vinnipux JavaScript, Ajax 2 01.11.2010 21:56
Доступ к файлам Gerzs Общие вопросы Delphi 10 09.10.2009 21:21
Доступ к файлам za4ot Работа с сетью в Delphi 1 22.01.2009 15:31
доступ к файлам ryton Общие вопросы Delphi 13 23.05.2008 14:15