всплывающее окно Chrome NPAPI, расширение, перенаправление на новую вкладку - PullRequest
1 голос
/ 21 октября 2010

Эй, у меня быстрый вопрос:

У меня есть расширение Chrome, которое добавляет всплывающую страницу на панель инструментов. Он принимает входные данные от пользователя, затем вызывает DLL-файл NPAPI, который генерирует файл XML. Я хотел бы иметь возможность после завершения работы библиотеки NPAPI создать новую вкладку, которая откроет новую сгенерированную страницу XML.

Может кто-нибудь помочь мне с этим?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 октября 2010

В идеале вы не помещаете логику поведения пользовательского интерфейса в плагин, а в расширение. Плагин должен сообщить расширению, где находится файл XML, а расширение должно обрабатывать все остальное.

Это можно сделать двумя способами:

Синхронно вернуть местоположение легко: вы выполняете работу непосредственно из реализации Invoke() вашего плагина и возвращаете строку, содержащую местоположение файла, в сценарий.
Это, конечно, имеет обратную сторону - блокировать основной поток (и GUI-) до тех пор, пока обработка не будет завершена, и, таким образом, не является опцией, если обработка не выполняется быстро.

Асинхронно его возврат - это немного больше работы: в идеале вы разрешаете расширению указывать функцию обратного вызова, которая должна вызываться после завершения обработки. Это может быть достигнуто либо соответствующей обработкой addEventListener(), либо разрешением сценарию передавать обратный вызов в качестве параметра, когда он инициирует обработку XML. Затем функция обработки XML запускает или передает другой поток, выполняющий фактическую работу, и немедленно возвращается. Когда обработка завершена, вы вызываете NPN_InvokeDefault() для объекта сохраненной функции, чтобы вызвать его.
Осторожно: Вызов в JavaScript всегда должен выполняться в главном потоке.

0 голосов
/ 22 октября 2010

Вы можете разрешить NPAPI общаться с JavaScript через NPN_Invoke . NPN_Invoke позволит вам вызывать метод для данного NPObject .

Например, вы можете создать свой метод NPN_GetStringIdentifier и использовать его для выполнения метода во всплывающем окне.

Вы можете обратиться к этой статье о том, как связаться с JavaScript из плагина NPAPI. Показанный здесь пример представляет собой простой console.debug("Hello from C++")

Обновление

Я заметил, что вы хотите открыть XML-файл сразу после. Вы сохранили файл XML в папке с расширением?

C:\Users\[user]\AppData\Local\Google\Chrome\User Data\Default\Extensions\[extension_id]\[extension_version]

Затем вы можете открыть его с помощью chrome.extension.getURL([file]);

Но было бы здорово, если бы вы вернули XML-файл и открыли его в самом расширении.

...