Можете ли вы различать несколько переменных с помощью addEventListener (javascript)?

#javascript #variables #addeventlistener #postmessage

Вопрос:

В принципе, я хочу сделать что-то вроде этого:

 var a = 3; var b = 4; postMessage(a, '*'); postMessage(b, '*');  

Затем попросите слушателя сделать что-то вроде этого:

 addEventListener('message', event =gt; { sessionStorage.setItem("variable a",event.data=a); sessionStorage.setItem("variable b",event.data=b);  

});

Очевидно, что «event.data=a» и «event.data=b» не являются реальным кодом, но я надеюсь, что смысл дойдет…

Спасибо!

Комментарии:

1. Передайте имя переменной явно, если вас это волнует.

2. @Bergi это ИМЕННО то, что я действительно хочу сделать… так как же мне явно передать имя переменной через postMessage и записать его в addEventListener? Программирующий простак здесь… извините…

3. postMessage({name: "a", value: a}) . Тогда вы можете console.log(`variable ${event.data.name} = ${event.data.value}`)

4. Круто… Теперь я понимаю, как это работает. Я действительно видел нечто подобное раньше, но не смог уловить его значения. Я признателен за разъяснение.

Ответ №1:

Если типы совпадают, не совсем, с двумя addEventListeners — вместо этого рассмотрите возможность размещения объекта, состоящего из обоих a и b , и вместо этого сохраните строковый объект в хранилище. Это не только решает вашу проблему, но и является гораздо более управляемым и элегантным подходом.

 postMessage({ a, b }, '*');  

и

 addEventListener('message', event =gt; {  sessionStorage.setItem('datas', JSON.stringify(event.data)); });  

Комментарии:

1. Это чертовски круто… спасибо! Ваше простое решение также заставило меня понять, что я мог бы просто отправить массив, который, я полагаю, тоже был бы способом выполнить то, что я пытался сделать. Сначала мне это было не очевидно…

2. Когда ответ решит вашу проблему, вы можете проголосовать и/или отметить его как принятый (установите флажок слева), чтобы указать, что проблема решена 🙂

3. Я проголосовал, но у меня недостаточно очков репутации, чтобы это показать (извините). Я еще не «принял этот ответ», потому что он явно не отвечает на мой вопрос, даже если он был чрезвычайно полезен. Я думаю, что @Bergi в комментариях выше более точно уловил суть моего вопроса. В конечном счете, однако, я хотел бы определить var a = 3; в iframe и передать ВСЮ эту информацию в родительское окно (т. Е. «a = 3»), предпочтительно без необходимости устанавливать новую переменную в родительском окне. Не уверен, возможно ли это или нет. Я полагаю, что это не то, что я говорю с помощью бита sessionStorage….

4. Я также хочу перенести «a = 3» на веб-страницы на вкладке браузера. например, установите var a = 3; в iframe отправьте эту информацию в родительское окно, а затем сохраните эту информацию, когда я перейду на другую страницу на той же вкладке браузера, чтобы затем я мог использовать «a = 3» на этой новой странице. Вероятно, в моей голове это имеет больше смысла, чем на бумаге… извините

5. Я должен также добавить, что мне нужно сделать это для нескольких переменных в одном и том же фрейме iframe и обновить значения этих переменных в родительском окне по мере их изменения в фрейме iframe перед переходом на новую страницу.