Tampermonkey in Chrome - Как использовать jquery, не влияя на сайт вообще - PullRequest
1 голос
/ 19 февраля 2020

С Tampermonkey в Google Chrome я хочу иметь возможность использовать значения от jquery до set/get, но мне нужно убедиться, что ничего не изменилось / не добавилось к dom.

Проще говоря, я хочу, чтобы userscript был абсолютно невидимым для влияющего веб-сайта.

Является ли jquery, который я добавил, невидимым для области сайта?

Другая проблема заключается в том, что если jquery уже присутствует?

Я сделал @grants правильно?

Вот моя попытка

// ==UserScript==
// @name         test
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        *
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_setClipboard
// @grant unsafeWindow
// @grant window.close
// @grant window.focus
// ==/UserScript==

(function() {
    'use strict';

    //var $ = unsafeWindow.jQuery;
    var $ = window.jQuery;
    $(document).ready(Greasemonkey_main);

    function Greasemonkey_main ()
    {
    //$("#elem").val()    
    }


})();

1 Ответ

2 голосов
/ 19 февраля 2020

Если у вас есть хотя бы одна директива @grant, отличная от none, она активирует песочницу Tampermonkey. Эта песочница приведет к тому, что библиотеки @require d будут назначать себя песочнице window, а не на собственной странице * window и ссылаться на window переменная внутри кода usercript будет ссылаться на изолированную программную среду window, а не на исходную страницу window.

Если у вас @grant none, это будет означать , а не для использования песочница, и @require s приведет к тому, что свойства будут присвоены исходному window (а ссылка window внутри скрипта пользователя будет ссылаться на исходный window).

Поскольку у вас есть @grant, который включает песочницу, и вы ссылаетесь на window.jQuery, которая будет ссылаться на версию песочницы jQuery, ничего не делая для страницы, поэтому она должна работать как нужно, независимо от того, уже jQuery на странице native или нет. (Поскольку вы находитесь в песочнице, не должно быть никаких конфликтов)

...