Загрузка библиотеки JavaScript в Python с использованием PyV8
Я пытаюсь использовать некоторые функции библиотеки leaflet.js в моем коде Python. И для выполнения команд JS в коде я использую PyV8. Но я не могу загрузить библиотеку leaflet.js в контекст PyV8. Когда я делаю это,
ctxt.eval(open("leaflet.js").read())
Я получаю ошибку:
ReferenceError: window is not defined ( @ 9 : 68 ) -> of t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,doc
Я даже пытался загрузить библиотеку jquery, прежде чем подумать, что листовка зависит от нее. Но тогда я получаю ошибку,
TypeError: Cannot read property 'defaultView' of undefined ( @ 2 : 68 ) -> :!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultVi
Есть ли способ, которым я могу успешно загрузить библиотеку JS?
1 ответ
Вы можете использовать только те библиотеки, которые не зависят от DOM, поскольку он явно недоступен на стороне сервера. Одним из примеров такой универсально используемой библиотеки является mustache.js.
Редактировать: Похоже, что есть способ, по-видимому, листовки все еще могут быть полезны без DOM - сначала нужно просто несколько воссоздать DOM, как показывает этот приятель: https://github.com/rclark/server-side-leaflet, Примечание: не уверен, работает ли это вместе с PyV8, вам просто нужно попробовать.
Edit2: чтобы немного расширить предыдущий пункт: то, что вы получаете с PyV8, - это чистая не основанная на браузере среда выполнения javascript. Он не имеет представления о том, что такое "окно" или "документ", поскольку V8 не заботится об интерфейсе пользователя. Для работы Leaflet нужен DOM, поэтому ему нужно "думать", что он живет в браузере. Листовка на стороне сервера rclark требует определенных расширений node.js, поэтому он не будет работать в PyV8.
Есть такая реализация DOM javascript, которая может работать в PyV8: https://github.com/andreasgal/dom.js/. Вам нужно будет загрузить все предоставленные там исходники js в PyV8 в правильном порядке - обратите внимание, что эта библиотека предоставляет инструкции только для spidermonkey, а не для V8. То есть это будет сложно, чтобы получить права.
Итак, на мой взгляд, у вас есть следующие варианты (в порядке возрастания сложности и / или требуемых навыков):
- Кто-то, по-видимому, решил эту проблему для python в следующем потоке, но, видимо, с помощью некоторого прямоугольного приближения с использованием OTR - см. Его ссылку на github в комментариях к принятому ответу. Я бы проверил это и решил, достаточно ли хорошее приближение. Страна поиска координат GPS без доступа в Интернет
- Переключитесь на браузерную среду и используйте брошюру напрямую.
- Переключитесь на node.js и используйте порт rclark.
- Попробуйте каким-то образом вставить DOM в PyV8, возможно, используя andreasgal, а затем использовать буклет оттуда.
- Адаптируйте листовку под свои нужды, чтобы она больше не зависела от DOM (начните с экранирования чего-либо, используя окно и / или документ в чем-то подобном
if (typeof(window) === 'object' && window !== null){...}
, Если у вас все получится, я бы сделал запрос на проект листовки, поскольку многие другие могут получить выгоду от вашей работы.