Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача переменной в функцию | chrome extensions (https://javascript.ru/forum/misc/53691-peredacha-peremennojj-v-funkciyu-%7C-chrome-extensions.html)

_uNcommon 13.02.2015 21:35

Передача переменной в функцию | chrome extensions
 
Вложений: 4
Здравствуйте!

Есть небольшое расширение для хрома, с помощью которого я хочу индивидуально улучшить интерфейс некой страницы.

Принцип действия:
При включенном расширении постоянно работает фоновой скрипт (background.js), который внедряет на разрешенную мною веб-страницу мою функцию (из другого скрипта, main.js) и вызывает её по событию onload.

popup.html:
В расширении есть страница настроек. В ней прописан checkbox, который отвечает за запуск моей внедряемой функции или её остановку. В приложении к теме картинки интерфейса страницы настроек расширения.

main.js:
Значение checkbox`a я сохраняю в localStorage. Состояние checkbox`a (true / false) изменяется в зависимости от данных в localStorage.

Не получается:
Достать это значение из localStorage и использовать его в проверке.

Пример:
// сохраняю состояние checkbox`a при клике на него
function saveOPT(){
  var CHBX = document.getElementById('myCHBX').checked;
  localStorage.setItem('keyCHBX', CHBX);
  
  // подсказка о том что я сохранил
  document.getElementById('result').innerHTML = "saved: " + localStorage.getItem('keyCHBX');
}

// достаю значение из localStorage и меняю состояние checkbox`a
function resOPT(){
  var valCHBX = localStorage.getItem('keyCHBX');
  // если в хранилище нет такого ключа, записываем его
  (valCHBX == null) ? valCHBX = false : '';
  // т.к. в хранилище записывает текст, делаю доп. проверку
  (valCHBX == "true") ? valCHBX = true : valCHBX = false;
  
  document.getElementById('myCHBX').checked = valCHBX;
  document.getElementById('result').innerHTML = "already: " + valCHBX;
}
// функция, которая внедряется, и для которой мне не получается сделать проверку.
// Если делать так :

var valCHBX = localStorage.getItem('keyCHBX');
(valCHBX == "true") ? valCHBX = true : valCHBX = false;

function main() {
  if(valCHBX){
    alert('checked = true');
  } else {
    alert('checked = false');
  }
}

// Функция не выполняется (т.е. выводит checked = false), т.к. ищет keyCHBX в хранилище сайта, на котором я запускаю расширение. Соотв. данного ключа там нет.
// Если делать так :

var valCHBX = true; или var valCHBX = false;

function main() {
  if(valCHBX){
    alert('checked = true');
  } else {
    alert('checked = false');
  }
}

// Проверка происходит нормально.


Как мне выполнить проверку с моими данными, в зависимости от состояния checkbox`a?

MallSerg 13.02.2015 22:26

Скрипт который ты предположительно внедрил в страницу(main.js) и расширение(popup.html и background.js) работают в разных контекстах.
т.е. для тебя это выражается в том что у расширения и страницы с внедренном скриптом разные домены соответственно и localStorage то же разные.
Это легко проверить открыв в отладчике (клавиша f12) вкладку resourses и проверив значения в localStorage.

Цитата:

Сообщение от _uNcommon
Как мне выполнить проверку с моими данными, в зависимости от состояния checkbox`a?

Не использовать localStorage с разных доменов.

_uNcommon 13.02.2015 23:46

MallSerg, да, именно в этом у меня и возникла проблема. пробовал также хранить значение в cookie - результат тот же (в принципе, как и причина). Есть какие-нибудь альтернативные варианты хранения?

_uNcommon 19.02.2015 23:28

Все еще актуально.


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