Получить 2 пользовательских скрипта для взаимодействия друг с другом?

У меня есть два скрипта. Я помещаю их в одно и то же пространство имен (поле @namespace).

Я бы хотел, чтобы они взаимодействовали с другим.

В частности, я хочу, чтобы скрипт A установил RunByDefault на 123. Пусть скрипт B проверяет, RunByDefault==123 или нет, а затем скрипт A использует тайм-аут или что-то еще для вызова функции в сценарии B.

Как мне это сделать? Я бы не хотел объединять сценарии.


person Community    schedule 11.08.2011    source источник
comment
Я удивлен, что за этот вопрос больше не проголосовали.   -  person dwjohnston    schedule 25.10.2016


Ответы (1)


Скрипты не могут напрямую взаимодействовать друг с другом, а // @namespace просто разрешает скрипт< /em> конфликты имен. (То есть у вас может быть 2 разных скрипта с именем «Удаление ссылок», только если у них разные пространства имен.)

Отдельные сценарии могут обмениваться информацией, используя:

  • Файлы cookie -- работают только в том же домене
  • localStorage -- работает только в том же домене
  • Отправка и получение значений через AJAX на сервер, которым вы управляете, — работает междоменно.

Вот и все.

Различные запущенные экземпляры одного и того же скрипта могут обмениваться информацией с помощью GM_setValue() и GM_getValue(). Преимущество этого метода заключается в том, что он является междоменным, простым и невидимым для целевой веб-страницы.

См. этот рабочий пример взаимодействия между таблицами в Tampermonkey.


В Chrome и только в Chrome вы можете использовать нестандартные API файловой системы для хранения данных в локальном файле. Но это, вероятно, потребовало бы, чтобы пользователь нажимал на каждую транзакцию — если бы это вообще работало.

Другой вариант — написать расширение (надстройку), которое будет действовать как помощник и выполнять файловый ввод-вывод. Обычно вы взаимодействуете с ним через postMessage.

На практике я никогда не сталкивался с ситуацией, в которой не было бы проще и чище просто объединить любые скрипты, которым действительно нужно обмениваться данными.


Кроме того, скрипты не могут совместно использовать код, но они могут внедрить JS на целевую страницу и получить к ней доступ.

Наконец, AFAICT, сценарии всегда выполняются последовательно, а не параллельно. Но вы можете управлять порядком выполнения на панели Управление пользовательскими сценариями.

person Brock Adams    schedule 11.08.2011
comment
Как я могу внедрить скрипт на страницу? - person ; 11.08.2011
comment
См., например, первую часть этого ответа. . По сути, вы создаете узел <script>. - person Brock Adams; 11.08.2011