Может ли модуль Native Client отображать HTML, сгенерированный кодом C ++? - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть некоторый код анализа данных, который обрабатывает входной файл и выводит HTML и / или SVG.Это C ++ и загрузка процессора.

Я хотел бы создать плагин для браузера, чтобы мой код можно было использовать, не выходя из браузера.Платформа Google Native Client и Pepper API звучат интересно, но, возможно, слишком ограничительно.Из модуля Native Client возможно ли сделать следующее через Pepper?

  1. Доступ к локальному файлу в файловой системе пользователя.Я знаю, что песочница NaCl обычно предотвращает это, но, безусловно, есть способ передать выбранный пользователем файл из слоя Javascript в NaCL?

  2. Вывести HTML или SVG обратно в браузер.Есть ли способ, которым C ++ может изменить DOM содержащего документа?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

я менее уверен в (1), но (2) определенно не представляется возможным напрямую.

для (1) Pepper API должен позволять средствам выбора файлов делать файлы доступными для модулей NaCl,так же, как WebFS позволяет это для JavaScript.я не уверен в статусе реализации этого.

для (2), код C ++ не может напрямую манипулировать DOM.однако модуль NaCl может использовать интерфейс PostMessage для отправки строк в код JavaScript, который затем может выполнять фактические манипуляции с DOM.обратите внимание, что в Chrome модули NaCl являются обработчиками событий.это означает, что, если вычисление запускается каким-либо событием и выполняется синхронно (и это сильно загружает ЦП), это может привести к потере интерактивной реакции браузера или потерем, так как обработчику события потребуется слишком много времени для возврата.лучший способ - создать фоновый поток для выполнения работы в обработчике событий (или разбудить рабочий поток) и немедленно вернуться из обработчика событий.когда вычисление выполнено и результаты готовы, PostMessage возвращает результат, чтобы позволить потоку JavaScript проснуться (снова как обработчик событий) и выполнить манипулирование DOM.обратите внимание, что в настоящее время PostMessage должен вызываться в главном потоке, поэтому рабочий поток должен использовать CallOnMainThread для пробуждения основного потока обработчика событий, чтобы он, в свою очередь, мог выполнять PostMessage.

не является продолжением передачи стиля

0 голосов
/ 17 февраля 2016
  1. Файл может быть загружен в файловую систему HTML с использованием элемента ввода файла и JavaScript, где он может затем обрабатываться как JavaScript, так и NaCl. Библиотека nacl_io реализует стандартные методы posix, такие как fread, поэтому, как только вы сохраните свой файл, все будет довольно просто. См. здесь для JS (не откладывайте сообщение об устаревании, оно реализовано в Chrome) и здесь для NaCl.

  2. Как упоминалось @Bennet Yee, модуль NaCl не может изменять страницу, а вместо этого передает сообщения обратно в окно браузера, которые обрабатываются вашим JavaScript. Похоже, вы, вероятно, захотите вернуть некоторые данные JSON. См. здесь для документов Google по системе обмена сообщениями.

...