提问人:Adi Lasri 提问时间:8/23/2023 最后编辑:mplungjanAdi Lasri 更新时间:8/23/2023 访问量:72
不能在函数外部使用 const/var
Can't use const/var outside of a function
问:
这是一个在 Tampermonkey 上运行的 javascript 脚本
我不能在定时函数之外使用我的 const idElement。
我需要在 sendEmail 函数中使用我的 get 值。我不能在 sendEmail 函数中使用 getElementbyId,我必须放置 I 计时器,因为我需要使用此脚本的页面加载非常奇怪(连续 3 或 4 次)。
当我将 sendEmail 放入 timed 函数时,值在 in 中。
我尝试将 sendEmail 放入定时函数中,但我需要一个按钮来启动 sendEmail,而不是定时。
“recup”之所以出现,是因为试图验证我是否可以使用它(idElement),但只能从定时函数中使用它。
(function() {
'use strict';
// Créer le bouton
var emailButton = document.createElement('button');
emailButton.innerText = 'Envoyer un e-mail';
emailButton.style.position = 'fixed';
emailButton.style.bottom = '20px';
emailButton.style.right = '20px';
emailButton.style.zIndex = '9999';
emailButton.style.padding = '10px';
emailButton.style.backgroundColor = '#a83232';
emailButton.style.color = 'white';
emailButton.style.border = 'none';
emailButton.style.borderRadius = '5px';
emailButton.style.cursor = 'pointer';
const idElement = "rien";
function recup(idElement) {
if (idElement) {
console.log('Valeur de l\'input:', idElement);
} else {
console.log('Élément input introuvable.');
}
}
window.addEventListener('load', function() {
// Utilisez setTimeout pour afficher le message après 1 minute (60000 millisecondes)
setTimeout(function() {
const idElement = document.getElementById('application-AccessManagement-Display-component---accessManagementPhase--accessmanagement_01_01_01-defaultXML--internationalCode-inner').value;
console.log(idElement);
return idElement;
emailButton.style.backgroundColor = '#38a832';
}, 10000);
});
// Ajouter le bouton à la page
document.body.appendChild(emailButton);
// Fonction pour ouvrir l'application de messagerie par défaut avec des informations pré-remplies
function sendEmail(idElement) {
var destinataire = 'kevin';
var recipient = '[email protected]';
var subject = 'Sujet de l\'e-mail';
// Variables que vous pouvez définir
var variable2 = 'Valeur de la variable 2';
var variable3 = 'Valeur de la variable 3';
// ... Ajoutez plus de variables si nécessaire
// Corps de l'e-mail avec les variables
var body = 'Contenu de l\'e-mail :\n\n';
body += 'Variable 1 : ' + idElement + '\n';
body += 'Variable 2 : ' + variable2 + '\n';
body += 'Variable 3 : ' + variable3 + '\n';
var mailtoLink = 'mailto:' + recipient + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(body);
window.location.href = mailtoLink;
};
// Ajouter l'événement de clic au bouton
emailButton.addEventListener('click', sendEmail(idElement));
// Appeler la fonction recup lorsque la page est complètement chargée
//document.addEventListener('DOMContentLoaded', recup);
})();
答:
改变
emailButton.addEventListener('click', sendEmail(idElement));
自
emailButton.addEventListener('click', () => { sendEmail() });
或者只是
emailButton.addEventListener('click', sendEmail);
由于您立即调用 sendmail,因此您可以添加事件 -
然后更改为并让函数访问全局变量。function sendEmail(idElement) {
function sendEmail() {
然后,还要从函数内部删除 并将全局变量更改为const
const idElement
let idElement
我已将超时更改为间隔,因此它将每秒检查一次元素是否存在,并在存在时停止
我还把所有东西都包装在DOMContentLoaded中,因为它更有意义
(function() {
'use strict';
window.addEventListener('DOMContentLoaded', function() {
// Créer le bouton
var emailButton = document.createElement('button');
emailButton.innerText = 'Envoyer un e-mail';
emailButton.style.position = 'fixed';
emailButton.style.bottom = '20px';
emailButton.style.right = '20px';
emailButton.style.zIndex = '9999';
emailButton.style.padding = '10px';
emailButton.style.backgroundColor = '#a83232';
emailButton.style.color = 'white';
emailButton.style.border = 'none';
emailButton.style.borderRadius = '5px';
emailButton.style.cursor = 'pointer';
let idElement = "rien"; // accessible from the whole IIFE
// Utilisez setTimeout pour afficher le message après 10 secondes
let tId = setInterval(function() {
const element = document.getElementById('application-AccessManagement-Display-component---accessManagementPhase--accessmanagement_01_01_01-defaultXML--internationalCode-inner');
if (element) {
idElement = element.value; // set the global value
console.log(idElement);
emailButton.style.backgroundColor = '#38a832';
clearInterval(tId)
}
}, 1000);
// Ajouter le bouton à la page
document.body.appendChild(emailButton);
// Fonction pour ouvrir l'application de messagerie par défaut avec des informations pré-remplies
function sendEmail() {
var destinataire = 'kevin';
var recipient = '[email protected]';
var subject = 'Sujet de l\'e-mail';
// Variables que vous pouvez définir
var variable2 = 'Valeur de la variable 2';
var variable3 = 'Valeur de la variable 3';
// ... Ajoutez plus de variables si nécessaire
// Corps de l'e-mail avec les variables
var body = 'Contenu de l\'e-mail :\n\n';
body += 'Variable 1 : ' + idElement + '\n'; // from the global variable
body += 'Variable 2 : ' + variable2 + '\n';
body += 'Variable 3 : ' + variable3 + '\n';
var mailtoLink = 'mailto:' + recipient + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(body);
window.location.href = mailtoLink;
};
// Ajouter l'événement de clic au bouton
emailButton.addEventListener('click', sendEmail);
});
})();
评论