@Tutucu

Как сделать кроссдоменный ajax запрос в chrome extensions (расширение для хрома)?

Здравствуйте!

Пишу расширение для браузера хром.

В чём суть: есть парсер, который проверяет новые письма в Я.Почте и отправляет их озвучивать умной колонке с Алисой.

Проблема

Проблема в том, что это костыль и API у яндекс.почты этого нет, как и API для колонки с Алисой.
Пришлось изучать js-код и смотреть, какие запросы куда отсылаются, и использовать этот js на этих же сайтах немного модернизированным, для того, чтобы работало как нужно мне (через юзерскрипт).


Моя реализация

Сейчас реализовал при помощи табов (chrome.tabs):.
Когда нажимается кнопка, или каждые 30 секунд, проверяются новые письма или зачитываются существующие, открывается неактивный таб с нужным сайтом и get параметром передаётся текст. На этом сайте ещё 1 мой js юзерскрипт уже делает (подделывает) запрос к колонке и она зачитывает переданный текст. После этого неактивная вкладка закрывается.


Очень плохая схема с костылями - знаю, но у Алисы нет нормального API, а у Яндекс.Почты его вообще нет.
На ПК всё отлично работает!
Проблема на андроид

Но на смартфонах (андроид) - мало того, что неактивная вкладка становится активной, так она и не закрывается, и скрипт мой ломает (вкладка с почтой автоматом сворачивается и js на ней останавливается), а без смарта всё коту под хвост идёт (я планировал на ночь смартфон ставить на зарядку и оставлять страницу с почтой открытой, чтобы они отправлялись колонке даже ночью).


В общем долго этот костыль писал и такой облом получил.

И вот вопросы:
  1. Можно ли сразу из яндекс почты делать ajax запрос на другой сайт без вкладок? До этого пытался и получал ошибку о кроссдоменных запросах. Может есть вариант через bg.js? Вкладки через него сделал.
  2. Можно ли как-то адаптировать данный механизм с вкладками для андроидов? Меня впринципе бы устроило, если бы новая вкладка открывалась на несколько секунд, отрабатывала скрипт, а потом закрывалась, перебрасывая обратно на Я.Почту.
  3. Можно ли без ajax запустить мой скрипт на другой странице через расширение?


PS: Расширение не буду нигде выкладывать, только для себя делаю, ну и ради интереса первое расширение пишу. Хотя с безопасностью тоже не хочу играть.
  • Вопрос задан
  • 434 просмотра
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
В расширениях для бразуера есть не только юзер скрипты, но и, так называемая, фоновая страница или фоновый скрипт (одно и то же). Это как бы скрытая вкладка самого расширения, которая всегда активна, пока активно расширение. В этой вкладке прямо в js можно хранить всё то, что нужно для работы расширения, а также выполнять задачи, затрагивающие расширение в целом. Например, можно делать ajax к любым доменам.

Чтобы из фоновой страницы сделать ajax запрос на какой-то домен, у расширения должны быть права на этот домен. Крайний вариант - задать расширению права на любые домены, но пользователи этого не очень любят, т.к. расширение потенциально сможет украсть ценные данные с личных вкладок пользователя, а если прав нет, то в любом случае не сможет.

Дать права можно в манифесте. Вот так выглядят права на все сайты (плюс на табы):
"permissions": [
	"<all_urls>", "tabs"
],

Вот пример другого набора прав (на конкретные сайты плюс всякое):
"permissions": [
	"https://toster.ru/*", "https://habr.com/*", "notifications", "storage"
],
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы