обмениваться данными между двумя сценариями greasemonkey, работающими на разных страницах - PullRequest
0 голосов
/ 27 января 2020

с Firefox 68 и Greasemonkey 4.9, я хочу установить значение из скрипта на веб-странице и получить то же значение из другого скрипта на другой веб-странице. кажется, не работает. Как я могу это сделать ? Вот что я попробовал:

script 1

// ==UserScript==
// @name     My EDIT
// @version  1
// @match http://one.local/stuff/edit*
// @grant       GM.setValue
// @grant       GM.getValue
// ==/UserScript==

(async () => {
  let count = await GM.getValue('count', 0);
  await GM.setValue('count', count + 1);
  console.log(count);
})();

script 2

// ==UserScript==
// @name     My VIEW
// @version  1
// @match http://www.two.local/view
// @grant       GM.getValue
// ==/UserScript==

(async () => {
  let count = await GM.getValue('count', 0);
  console.log(count);
})();

, даже если значения увеличиваются при посещении http://one.local/stuff/edit много раз, я не могу получить их при посещении http://www.two.local/view (осталось 0!

1 Ответ

1 голос
/ 27 января 2020

Любой хороший менеджер скриптов НЕ ДОЛЖЕН разрешать хранение скрипта A доступа к скрипту B, так как это будет серьезным нарушением безопасности.

Вы можете объединить скрипты в один скрипт, который выполняется на обеих страницах. Таким образом, хранилище будет общим.

Простой пример:

// ==UserScript==
// @name            Combined
// @version         1
// @match           http://one.local/stuff/edit*
// @match           http://www.two.local/view
// @grant           GM.setValue
// @grant           GM.getValue
// ==/UserScript==

(async () => {

// code for one.local  
if (location.hostname === 'one.local') {  

  const count = await GM.getValue('count', 0);
  await GM.setValue('count', count + 1);
  console.log(count);
}
// code for www.two.local
else if (location.hostname === 'www.two.local') {

  const count = await GM.getValue('count', 0);
  console.log(count);
}

})();
...