Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача массива аргументов (https://javascript.ru/forum/misc/68598-peredacha-massiva-argumentov.html)

Артист 26.04.2017 10:23

Передача массива аргументов
 
Есть скрипт, подключаемый к странице, есть скрипт приложения(фоновый).
Общаются они посредством chrome.runtime.sendMessage.

Вот например я отправляю мессагу в фоновый скрипт, с 2мя параметрами:
function smCalback(response) // Обработчик ответов на сообщения
{
    alert('Ответ ' + response.respId)   
}
 
chrome.runtime.sendMessage({msgId: 1, respId: 111}, smCalback) // Отправка сообщения


А это в фоновом скрипте, принимает сообщения, и отвечает на них.
chrome.runtime.onMessage.addListener // Отлов сообщений от контент скриптов
(
    function(req, sender, resp)
    {
        switch(req.msgId) // Ид сообщения
        {
            case 1: // Некое действие
            {
                resp({respId: req.respId}) // Ответ на сообщение
                break
            }
        }
        return false
    }
)


Так вот, как мне передать все параметры в ответе на сообщение, которые были у сообщения?
Т.е. чтобы не писать их вот так:
{respId: req.respId}


Конечно это всего лишь пример, на самом деле мне параметры нужно передавать в функции...

Гуглил конечно:
function sayHi()
{
    for (var i = 0; i < arguments.length; i++)
    {
        alert( "Привет, " + arguments[i] );
    }
}
 
sayHi("Винни", "Пятачок"); // 'Привет, Винни', 'Привет, Пятачок'


Но не понял нифига, мне перебирать не нужно, я же аргументы подписываю...

Артист 26.04.2017 10:47

Спасибо. ))

Артист 26.04.2017 11:04

А как вот тут сделать:
function GetHttpRequest(href, arg) // Get запрос на url
{
	var xhr = new XMLHttpRequest()
	xhr.withCredentials = true
	xhr.onreadystatechange = function(e)
	{
		e.data = arg
		ProcessRequestChange.apply(this, arguments) // Обработчик
	}
	xhr.open('GET', href, true)
	xhr.send(null)
}

chrome.runtime.onMessage.addListener // Отлов сообщений от контент скриптов
(
    function(req, sender, resp)
    {
        switch(req.msgId) // Ид сообщения
        {
            case 1: // Некое действие
            {
                GetHttpRequest(req.href, {reqId: req.reqId, respId: req.respId, response: resp})
                return true
            }
        }
        return false
    }
)


req - это массив аргументов мессаги, я так понял.
resp - функция, отправляющая ответ на мессагу.

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

Так уже не прокатит, видимо:
GetHttpRequest(req.href, req, resp)


Может можно в массив аргументов впихнуть и функцию?

Типа такого:
req.resp = resp

GetHttpRequest(req.href, req)

Артист 26.04.2017 12:29

Да, вроде работает...


Часовой пояс GMT +3, время: 08:50.