динамически создавать сценарий greasemonkey - PullRequest
1 голос
/ 31 января 2011

Я пытаюсь создать динамический скрипт GM. Вот то, что я думал, сделает это

win = window.open('myScript.user.js');
win.document.writeln('// ==UserScript==');
win.document.writeln('// @name          sample script');
win.document.writeln('// @description   alerts hi');
win.document.writeln('// @include       http://www.google.com/*');
win.document.writeln('// ==/UserScript==');
win.document.writeln('');
win.document.writeln('(function(){alert("hi");})()');
win.document.close();

Ну, это не так. У кого-нибудь есть идеи, как это сделать?

1 Ответ

2 голосов
/ 31 января 2011

Вы не можете динамически создавать сценарии Greasemonkey с помощью Greasemonkey (в одиночку).

Сценарий GM не является частью HTML-страницы, поэтому запись кода GM на страницу никогда не будет работать. Сценарий должен быть установлен в систему управления сценариями GM.

Сценарий GM не может ни записать в файловую систему, ни получить доступ к браузеру, достаточному для установки дополнения к сценарию.

  • Вы могли бы написать сценарий GM, который отправляет другие сценарии на сервер, а затем отправляет браузер на этот сервер. Затем GM предложит пользователю установить новый скрипт.

  • Вы могли бы написать надстройку для браузера, которая могла бы писать сценарии GM, но я подозреваю, что такой подход будет сложным.

  • Возможно, вы могли бы написать программу на Python (или C, VB и т. Д.), Которая генерирует сценарии GM для установки. При дополнительной работе такая программа, вероятно, может автоматически установить скрипт.


Почему вы хотите динамически создавать сценарии Greasemonkey? Может быть более простой метод для достижения истинной цели .?.



Обновление для комментария / уточнения ОП:

Re: "I want to be able to have a user select an element to get blocked and then create a script that sets that element's display to none on all sites from that domain" ...

Один из способов сделать это:

  1. Сохранение пар доменов и селекторов с использованием GM_setValue () .

  2. Сценарий, во-первых, проверит, есть ли у него значение, сохраненное для домена или URL текущей страницы (с использованием GM_getValue () или GM_listValues ​​() ).

  3. Если совпадение найдено, скрыть элемент (ы), как указано в селекторе.


Обратите внимание, что в зависимости от элемента превосходное расширение Adblock Plus может блокировать элемент более элегантно (экономит пропускную способность / время DL).

...