@ Grant GM функции из сценария @ require'd - PullRequest
0 голосов
/ 29 января 2019

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

В common.js являются общими функциями, и они вызывают GM_functions (например, GM.xmlHttpRequest).Каждый пользовательский скрипт @require [...]/common.js

Есть ли способ избежать повторения всех метаданных в каждом script.user.js:

// @require      [...]/common.js
// @grant        GM.getResourceText
// @grant        GM.xmlHttpRequest
// @grant        GM.setValue
// @grant        GM.getValue
// @connect      localhost
// @resource     styleSheet [...]/style.css

?

Я пытался @grant вcommon.js (или, называя его common.user.js), но похоже, что Greasemonkey все равно его игнорирует.

Я понимаю, что это можно считать недостатком безопасности, потому что вы можете не знать, какие привилегии вы в конечном итоге предоставляете, потому чтокаскадных @grants @ require.Однако Greasemonkey мог логически вывести окончательные привилегии из всех скриптов @required.

У меня тот же вопрос к @resource.

1 Ответ

0 голосов
/ 29 января 2019

Этого вряд ли когда-либо случится.

  1. Спрос на него очень маленький.
  2. Потребность в нем еще меньше.
  3. Это было бы огромной головной болью в области безопасности:

    1. Различные механизмы уже борются с предупреждением пользователя о том, какие злые вещи пытается сделать скрипт - и большинство пользователей все равно игнорируют его.
    2. Убедиться, что ранее хороший @require d файл не сломался.Большинство движков и сценариев даже не проверяют целостность подсистемы (хеш) в первую очередь.Это было бы в десять раз хуже, если бы @require s мог изменять метаданные.
    3. Просто определить, какими могут быть окончательные разрешения, будет непросто.У всех движков пользовательских сценариев есть более важные / срочные вещи, которые нужно кодировать до этого.

Я понимаю желание кодировать модульным и СУХИМ способом, но файлы с суперспособностями @requireэто не ответ.


Вы, вероятно, можете настроить свою среду сборки (EG Git ) для автоматического добавления @grant s для определенных файлов @require d при сборке финального файла.user.js file.

Если у вас нет такой среды отслеживания сборки / источника, то вы ожидаете катастрофы с суперсиловыми (или любыми) модулями в любом случае.

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