Я пытаюсь выбрать элементы DOM в переменной Tampermonkey, используя GM_setValue
, для последующей инъекции на разные страницы.Что делает Greasemonkey/Tampermonkey для моего объекта jQuery, когда я использую GM_setValue?
Я создал пример, где я могу сделать это в обычном jQuery, используя .clone()
, но когда я устанавливаю его как значение в Tampermonkey, он изменяет значение сохраненной переменной.
Вот HTML страницу, чтобы проверить скрипт на:
<!DOCTYPE html>
<html><head>
<script data-require="[email protected]*" data-semver="3.0.0" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js"></script>
<link rel="stylesheet" href="style.css"/>
<style>
div {
border: solid 1px black;
margin: 5px;
padding: 5px;
}
</style>
</head>
<body>
<!-- these buttons controlled by grease monkey-->
<div>
GreaseMonkey <button id="copy"> save</button>
<button id="paste"> paste </button>
</div>
<div>
Local <button id="copyLocal"> save</button>
<button id="pasteLocal"> paste </button>
</div>
<div id="bar"> hello world </div>
<script>
var ele;
$("#copyLocal").click(function() {
console.log("copy");
ele = $("#bar").clone();
console.log(ele);
});
$("#pasteLocal").click(function(){
console.log("paste");
console.log(ele);
$("body").append(ele);
});
</script>
</body>
</html>
А вот соответствующий Tampermonkey/Greasemonkey скрипт:
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js
// @match file:///C:/david/sandbox/jquery/index.html
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
(function() {
'use strict';
$(document).ready(function() {
$("#copy").click(function() {
console.log("copy");
var ele = $("#bar").clone();
console.log(ele);
GM_setValue("ele", ele);
});
$("#paste").click(function(){
console.log("paste");
var ele = GM_getValue("ele");
console.log(ele);
$("body").append(ele);
});
console.log("ready");
});
})();
Вот консольный вывод:
Как вы можете видеть - Tampermonkey (я также попробовал это с помощью Greasemonkey), похоже, удаляет jQuery из объекта jQuery.
Привет - спасибо за ответ. К сожалению, это не работает для того, что я на самом деле пытаюсь сделать, а именно для привязки данных к моим элементам DOM и сохранения их состояния. Вместо этого я рассмотрю использование файлов cookie. – dwjohnston
Вы все равно можете привязывать данные. Просто не используйте '.data()' jQuery. Использовать атрибуты данных; таким образом данные хранятся в HTML и, таким образом, 'GM_setValue'. Возможно, вам придется сначала закодировать JSON свои данные. ... Наконец, не используйте файлы cookie. Они отправляются на сервер и кажутся откинутыми (по причинам). Если вы идете по этому маршруту, вместо этого используйте 'localStorage'. –