Загрузка библиотеки 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. То есть это будет сложно, чтобы получить права.

Итак, на мой взгляд, у вас есть следующие варианты (в порядке возрастания сложности и / или требуемых навыков):

  1. Кто-то, по-видимому, решил эту проблему для python в следующем потоке, но, видимо, с помощью некоторого прямоугольного приближения с использованием OTR - см. Его ссылку на github в комментариях к принятому ответу. Я бы проверил это и решил, достаточно ли хорошее приближение. Страна поиска координат GPS без доступа в Интернет
  2. Переключитесь на браузерную среду и используйте брошюру напрямую.
  3. Переключитесь на node.js и используйте порт rclark.
  4. Попробуйте каким-то образом вставить DOM в PyV8, возможно, используя andreasgal, а затем использовать буклет оттуда.
  5. Адаптируйте листовку под свои нужды, чтобы она больше не зависела от DOM (начните с экранирования чего-либо, используя окно и / или документ в чем-то подобном if (typeof(window) === 'object' && window !== null){...}, Если у вас все получится, я бы сделал запрос на проект листовки, поскольку многие другие могут получить выгоду от вашей работы.
Другие вопросы по тегам