javascript - 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 对象总是强制为真。length
如果您想知道元素是否存在于 DOM 中,请使用该属性。
关于您的问题,内联事件属性,例如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);
}
})();
推荐阅读
- windows - 使用批处理脚本获取任何文件夹中的最新文件
- python - 将最大特征值与特征向量匹配
- javascript - 在 Elixir/Phoenix 中重用 nuxt 代码
- php - 如何使用 Laravel 广播在一个线程中连接两个随机的人
- ms-access - Access VBA:更改子窗体内的列宽
- vim - 可视行模式 - 将光标移动到行尾
- php - 是什么导致此代码中出现以下错误:HTTP 错误 411。请求必须分块或具有内容长度?
- angular - URL 中没有 index.html 的 Angular PWA 超时
- angular - 离子可选,但在表单内进行多项选择时出错
- wix-react-native-navigation - tabBarBackgroundColor 不适用于 topTabs 反应原生导航 Wix