Можно ли осуществлять перекрестный доступ к базам данных локального хранилища между отдельными расширениями Chrome? - PullRequest
2 голосов
/ 22 февраля 2011

Вопрос, я думаю, говорит само за себя, но если вам нужно больше, вот оно:

Расширение Chrome A сохраняет адрес электронной почты в localstorage.Chrome Extension B хочет увидеть этот адрес электронной почты.

Разрешено ли это?(Это может быть больше в HTML5, чем в Chrome, но мои знания ограничены, поэтому я создам их в контексте моего желания узнать ответ).

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Если вы владеете двумя расширениями, например, то, которое поддерживает оба расширения. Вы можете определенно использовать обмен сообщениями между расширениями, чтобы передать это электронное письмо или даже localStorage другому расширению.

Например, посмотрите мое расширение здесь: https://github.com/mohamedmansour/reload-all-tabs-extension/tree/v2

Одно расширение является ядром, а другое - просто действием браузера (сейчас они объединены с v3), но v2 позволяет им обоим общаться друг с другом. Действие браузера отправляет событие «ping», а расширение ядра прослушивает такое событие и возвращает «pong». Расширение действия браузера является «дополнением» к основному расширению. Когда вы открываете «Опции», он использует опции из основного.

Назад к вашим вопросам ... Чтобы получить доступ к кросс-расширениям localStorage, вы можете сделать что-то вроде этого:

расширение основного ядра:

localStorage['foo'] = 'bar';
var secondary_extension_id = 'pecaecnbopekjflcoeeiogjaogdjdpoe';
chrome.extension.onRequestExternal.addListener(
  function(request, sender, response) {
    // Verify the request is coming from the Add-On.
    if (sender.id != secondary_extension_id)
      return;

    // Handle the request.
    if (request.getLocalStorage) {
      response({result: localStorage});
    } else {
      response({}); // Snub them.
    }
  }
);

вторичное расширение:

var main_extension_id = 'gighmmpiobklfepjocnamgkkbiglidom'
chrome.extension.sendRequest(main_extension_id, {getLocalStorage: 1},
  function (response) {
    var storage = response.result;
    alert(storage['foo']); // This should print out 'bar'.
  }
);

Кстати, я действительно не тестировал это расширение. Я просто скопировал и вставил из перезагрузки все вкладки расширения, которые сделали что-то подобное.

1 голос
/ 22 февраля 2011

Не напрямую, но вы можете отправлять сообщения между внутренними номерами. Таким образом, если расширение, в котором хранятся электронные письма, ожидает запрос от какого-либо внешнего расширения, оно может прочитать необходимые данные и отправить их обратно. Подробнее об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...