Отправить сообщение со страницы параметров в сценарий содержимого

В документации Chrome мы можем отправить сообщение со страницы параметров, используя:

chrome.runtime.sendMessage

Мы не можем использовать:

chrome.tabs.sendMessage

Я хочу отправить сообщение со страницы параметров в сценарий содержимого. Могу я сделать это напрямую? Это мой скрипт страницы опций:

document.addEventListener("DOMContentLoaded", function() {
    var radio = document.querySelectorAll("input[type=radio][name=quality]");
    for(i=0; i<radio.length; i++)
    radio[i].addEventListener("change", function(){
        val = this.id;
        localStorage.setItem("youtube_filter_video_quality", val);
        chrome.runtime.sendMessage({"youtube_filter_video_quality": val});
    });
});

А вот сценарий содержимого:

    chrome.runtime.onMessage.addListener(
        function(request, sender, sendResponse) {
            if (request.youtube_filter_video_quality!==undefined){
                console.info(request.youtube_filter_video_quality);
            }
        }
    );

А вот и manifest.json:

{
    "name": "__MSG_name__",
    "short_name": "__MSG_short_name__",
    "manifest_version": 2,
    "version":"1.5.0.0",
    "description": "__MSG_description__",
    "default_locale": "en",
    "browser_action": {
        "default_icon": "48.png",
        "default_title": "__MSG_default_title__",
        "default_popup": "popup.html"
    },
    "background":{
        "page":"background.html",
        "persistent": false
    },
    "content_scripts":[
    {
        "matches": [ "*://*.youtube.com/*" ],
        "css": ["app_player.css"],
        "run_at": "document_end"
    }
    ],
    "permissions": [
        "tabs",
        "activeTab",
        "storage",
        "<all_urls>",
        "webNavigation"
    ],
    "icons": {
            "64":"64.png",
            "48": "48.png",
            "32":"32.png",
            "16": "16.png",
            "128": "128.png"
    },
    "options_page": "options.html",
    "options_ui": {
        "chrome_style": true,
        "page": "option.html"
    }
}

console.info не может ничего записывать (пусто).

We cannot use - вы имеете в виду то, что не является страницей опций. Страница параметров расширения, которая отображается на странице chrome: // extensions, имеет URL-адрес chrome-extension: //, поэтому она может делать все, что может делать расширение, включая chrome.tabs.sendMessage.
wOxxOm 02.04.2018 17:24

Примерно так: после настройки на странице параметров я нажимаю «Применить». Мое расширение будет обрабатывать действие с примененными параметрами. Я хочу отправить сообщение с этой страницы параметров на onclick. Это моя потребность. Вот из документации Chrome: «Если ваша страница параметров отправляет сообщение с использованием runtime.connect или runtime.sendMessage, вкладка отправителя не будет установлена, а URL-адрес отправителя будет URL-адресом вашей страницы параметров».

Freelancer 02.04.2018 17:31

Эта цитата из документации не относится к chrome.tabs.sendMessage.

wOxxOm 02.04.2018 17:37

Я пробовал использовать как runtime.sendMessage, так и tabs.sendMessage, но результат тот же. В console.info ничего не может написать? Любая ошибка в моем коде?

Freelancer 02.04.2018 17:42

Вы не показали свой код, использующий chrome.tabs.sendMessage. Он будет другим, потому что этой функции нужен идентификатор вкладки в качестве первого параметра.

wOxxOm 02.04.2018 17:43

chrome.tabs.query ({url: [': //.youtube.com/*']}, функция (вкладки) {for (i = 0; i <tabs.length; i ++) chrome.tabs.sendMessage (tabs [i ] .id, {"youtube_filter_video_quality": val});});

Freelancer 02.04.2018 17:52

Работает :) Извините! Я не знаю, почему chrome.runtime.sendMessage не работал.

Freelancer 02.04.2018 17:54

Нет. DOMContentLoaded находится на странице параметров. Сценарий содержимого не имеет этого слушателя.

Freelancer 02.04.2018 18:00

Так работает сейчас или нет?

wOxxOm 02.04.2018 18:11

Работал с tabs.sendMessage, не работал с runtime.sendMessage

Freelancer 02.04.2018 18:26
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
393
0

Другие вопросы по теме