T
T
Tutucu2019-06-11 05:17:46
JavaScript
Tutucu, 2019-06-11 05:17:46

How to make a cross-domain ajax request in chrome extensions (chrome extension)?

Hello!

I'm writing an extension for the Chrome browser.

What is the point: there is a parser that checks new letters in Ya.Mail and sends them to be voiced by a smart column with Alice.

Problem

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


My implementation

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


A very bad scheme with crutches - I know, but Alice does not have a normal API, and Yandex.Mail does not have it at all.
Everything works great on PC!
Problem on android

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


In general, this crutch wrote for a long time and received such a bummer.

And here are the questions:
  1. Is it possible to immediately make an ajax request from Yandex mail to another site without tabs? Before that, I tried and got an error about cross-domain requests. Maybe there is an option through bg.js? Made tabs through it.
  2. Is it possible to somehow adapt this mechanism with tabs for androids? In principle, it would suit me if a new tab opened for a few seconds, worked out the script, and then closed, transferring it back to Ya.Mail.
  3. Is it possible without ajax to run my script on another page through an extension?


PS: I won't post the extension anywhere, I'm only doing it for myself, well, for the sake of interest, I'm writing the first extension. Although I don't want to play with security either.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
dollar, 2019-06-11
@Tutucu

In browser extensions, there are not only user scripts, but also the so-called background page or background script (the same thing). This is like a hidden tab of the extension itself, which is always active while the extension is active. In this tab, right in js, you can store everything that is needed for the extension to work, as well as perform tasks that affect the extension as a whole. For example, you can do ajax to any domains.
To make an ajax request to a domain from a background page, the extension must have rights to that domain. An extreme option is to set the extension rights to any domains, but users do not really like this, because. the extension can potentially steal valuable data from the user's personal tabs, and if there are no rights, then in any case it will not be able to.
You can give permissions in the manifest. This is how the rights to all sites look like (plus tabs):

"permissions": [
  "<all_urls>", "tabs"
],

Here is an example of another set of rights (to specific sites plus everything):
"permissions": [
  "https://toster.ru/*", "https://habr.com/*", "notifications", "storage"
],

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question