1

Первый маленький фонКак получить идентификатор хромированной приложения от расширения

Я была поставлена ​​задача создания «программы», которая будет делать скриншоты веб-страниц в определенные моменты времени в течение дня и сохранить изображений в папку, доступную пользователю. Моя первоначальная мысль заключалась в том, чтобы создать расширение для выполнения этой работы, но вскоре я понял, что расширения не имеют доступа к файловой системе, поэтому я обратился к хром-приложениям, которые могут использовать API файловой системы. Тем не менее, хром-приложения не имеют доступа к функциям, необходимым для снятия скриншота с текущей страницы, поэтому я создал оба: расширение берет скриншот и отправляет его в приложение, которое сохраняет его в файловой системе , Процесс немного запутан, но работает как шарм.

Теперь связь с приложением/расширением происходит через хром Message Passing API. Для того, чтобы общение имело место, мне нужно заранее знать идентификатор расширения или приложения. Я до сих пор жестко закодировал идентификаторы, но учитывая, что эти идентификаторы будут меняться каждый раз, когда будет установлено расширение или приложение, мне нужен лучший подход.

Теперь Вопрос

Таким образом, вопрос: что является рекомендуемым способом, чтобы получить идентификатор хромированного приложения внутри расширения хрома и наоборот? План прямо сейчас использовать chrome.management API и выполните следующие действия:

В Extension

var APP_NAME = "Name of My App"; 
var _appId; 
... 
function initializeAppId() { 
    // must declare the "management" permission in the manifest 
    chrome.management.getAll(function(result) { 
    for (var i=0; i<result.length; i++) { 
     if (result[i].name == APP_NAME) { 
     _appId = result[i].id; 
     } 
    } 
    }); 
} 

Это способ пойти об этом? Мне все равно придется жестко закодировать имя приложения, но это не так трагично, как жесткое кодирование его идентификатора. Кроме того, упакованные приложения не имеют доступа к управлению api, поэтому, если бы я пошел по этому маршруту, мне пришлось бы делать это только с расширением. Как только я получу идентификатор приложения, я могу отправить сообщение в приложение и предоставить идентификатор расширения, который можно легко получить из внутреннего кода.

Как это звучит? Какие-либо предложения?

Благодаря

+0

Возможный дубликат [Получение идентификатора расширения Chrome для разработки] (http://stackoverflow.com/questions/23873623/obtaining-chrome-extension-id-for-development) – Xan

+1

Вкратце: если вы создаете ключ, будет использоваться для приложения (и сохраните его, поскольку он вам понадобится при публикации), вы можете «привязать» идентификатор в манифесте. – Xan

+0

Значения расширения/приложения будут жестко закодированы? Я активно избегал этого. –

ответ

1

Ваш подход является правильным в том смысле, что он будет работать.

Но chrome.management - большой молот не особо подходит для выполнения задачи.

Вы сказали, что идентификаторы меняются. Это происходит только с распакованными версиями, поскольку они еще не подписаны с криптографическим ключом; Хром должен назначить что-то как идентификатор, и он делает это by hashing the path to the extension/app.

Решение состоит в том, чтобы либо упаковать/подписать приложение один раз, чтобы получить подходящий открытый ключ внутри CRX, либо сделать криптографию самостоятельно as described here. Когда вы указываете свойство "key" в манифесте, Chrome использует его для получения идентификатора и он перестает меняться.

После этого вы можете запрограммировать идентификатор.

+0

Чувак, ты совершенно потрясающий! –

Смежные вопросы