Приложение Cefpython с файлами html/js в локальной файловой системе

Я пытаюсь сделать гибридное приложение python-js с cefpython.

Я бы хотел:

  • Файлы JS и HTML, локальные для приложения cef python (например, в./html,./js и т. Д.)
  • Загрузите один из файлов HTML в качестве начальной страницы
  • Избегайте любых проблем CORS с файлами, обращающимися друг к другу (например, между каталогами)

Кажется, что следующее работает для загрузки первой страницы:

browser = cef.CreateBrowserSync(url='file:///html/index.html',
                                window_title="Rulr 2.0")

Однако затем я столкнулся с проблемами CORS. Нужно ли мне также запускать веб-сервер? Или есть эффективный шаблон для работы с локальными файлами?

1 ответ

Попробуйте передать переключатель "disable-web-security" в cef.Initialize или установите BrowserSettings.web_security_disabled.

Попробуйте также установить BrowserSettings.file_access_from_file_urls_allowed и BrowserSettings.universal_access_from_file_urls_allowed.

В CEF есть несколько параметров для загрузки пользовательского содержимого, которые можно использовать для загрузки содержимого файловой системы без каких-либо ограничений безопасности. Есть обработчик ресурсов, обработчик схемы и менеджер ресурсов. В CEF Python в настоящее время доступен только обработчик ресурсов. На странице README-Examples.md приведен пример wxpython-response.py.

Менеджер ресурсов - это очень простой API для загрузки различного контента, он должен быть реализован в выпуске #418 (PR приветствуется): https://github.com/cztomczak/cefpython/issues/418

Об обработчике схемы см. В выпуске № 50: https://github.com/cztomczak/cefpython/issues/50

Кроме того, есть также GetResourceResponseFilter в восходящем CEF, который является более простой опцией, чем обработчик ресурсов, для реализации через выпуск № 229: https://github.com/cztomczak/cefpython/issues/229

Вы также можете запустить внутренний веб-сервер внутри вашего приложения (это легко сделать с помощью Python) и обслуживать файлы таким образом. Upstream CEF также имеет встроенную функциональность веб-сервера, однако я не думаю, что это проявится в cefpython, поскольку в Python уже легко настроить веб-сервер.

Другие вопросы по тегам