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

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

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

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

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

1 Ответ

7 голосов
/ 11 августа 2011

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

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

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

Вот и все.

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

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


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

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

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


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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...