Tampermonkey 中未定义的函数
Function not defined in Tampermonkey
我有下面的代码,但是当我点击按钮时,它找不到所需的功能。我不太擅长示波器,所以我认为这与此有关。
在此之前,我将其设置为 var name = function
并且一直有效,直到我需要使用 GM_setValue(尚未定义,但稍后会定义)。
// ==UserScript==
// @name Futbin Extractor
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://www.futbin.com/players
// @grant GM_getValue, GM_setValue
// ==/UserScript==
/* global $ */
(function() {
'use strict';
//defining all the variables
function extract (e) {
//all the stuff in this function
}
function startExtractor () {
console.log('Starting Extractor');
extractorRunning = true;
$('.player_tr_1').each(function () {
extract(this);
});
$('.player_tr_2').each(function () {
extract(this);
});
};
function siteSetup () {
var newBox = '<div id="fiddleBar"><button "startButton" onClick="startExtractor();">Test</button></div>';
$(newBox).insertBefore('#repTb');
}
if (!$('#fiddleBar')) {
siteSetup;
} else {
console.log('Repeating Site Setup');
setTimeout(siteSetup,100);
}
})();
这里有几个问题需要解决。首先,您可以将两个 .player_tr_1
和 .player_tr_2
选择器连接到一个 jQuery 对象中一起循环。此外 if (!$('#fiddleBar'))
永远不会命中,因为 jQuery 对象总是强制为真。如果您想知道元素是否存在于 DOM.
中,请使用 length
属性
关于您的问题,内联事件属性(例如 onclick
)需要在全局范围内声明该函数。这是它们是不良做法的部分原因,应该避免。而是使用委托事件处理程序,如下所示:
(function() {
'use strict';
function extract(e) {
// all the stuff in this function
}
function startExtractor() {
console.log('Starting Extractor');
extractorRunning = true;
$('.player_tr_1, .player_tr_2').each(function() {
extract(this);
});
};
$(document).on('click', '.startButton', function() {
startExtractor();
});
function siteSetup() {
var newBox = '<div id="fiddleBar"><button class="startButton">Test</button></div>';
$(newBox).insertBefore('#repTb');
}
if (!$('#fiddleBar').length) {
siteSetup();
} else {
console.log('Repeating Site Setup');
setTimeout(siteSetup, 100);
}
})();
我有下面的代码,但是当我点击按钮时,它找不到所需的功能。我不太擅长示波器,所以我认为这与此有关。
在此之前,我将其设置为 var name = function
并且一直有效,直到我需要使用 GM_setValue(尚未定义,但稍后会定义)。
// ==UserScript==
// @name Futbin Extractor
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://www.futbin.com/players
// @grant GM_getValue, GM_setValue
// ==/UserScript==
/* global $ */
(function() {
'use strict';
//defining all the variables
function extract (e) {
//all the stuff in this function
}
function startExtractor () {
console.log('Starting Extractor');
extractorRunning = true;
$('.player_tr_1').each(function () {
extract(this);
});
$('.player_tr_2').each(function () {
extract(this);
});
};
function siteSetup () {
var newBox = '<div id="fiddleBar"><button "startButton" onClick="startExtractor();">Test</button></div>';
$(newBox).insertBefore('#repTb');
}
if (!$('#fiddleBar')) {
siteSetup;
} else {
console.log('Repeating Site Setup');
setTimeout(siteSetup,100);
}
})();
这里有几个问题需要解决。首先,您可以将两个 .player_tr_1
和 .player_tr_2
选择器连接到一个 jQuery 对象中一起循环。此外 if (!$('#fiddleBar'))
永远不会命中,因为 jQuery 对象总是强制为真。如果您想知道元素是否存在于 DOM.
length
属性
关于您的问题,内联事件属性(例如 onclick
)需要在全局范围内声明该函数。这是它们是不良做法的部分原因,应该避免。而是使用委托事件处理程序,如下所示:
(function() {
'use strict';
function extract(e) {
// all the stuff in this function
}
function startExtractor() {
console.log('Starting Extractor');
extractorRunning = true;
$('.player_tr_1, .player_tr_2').each(function() {
extract(this);
});
};
$(document).on('click', '.startButton', function() {
startExtractor();
});
function siteSetup() {
var newBox = '<div id="fiddleBar"><button class="startButton">Test</button></div>';
$(newBox).insertBefore('#repTb');
}
if (!$('#fiddleBar').length) {
siteSetup();
} else {
console.log('Repeating Site Setup');
setTimeout(siteSetup, 100);
}
})();