不能在函数之外使用 const/var

问题描述 投票:0回答:1

这是一个在 Tampermonkey 上运行的 javascript 脚本

我无法在定时函数之外使用 const idElement。

我需要在 sendEmail 函数中使用 get 的值。我无法在 sendEmail 函数中使用 getElementbyId 我必须放置计时器,因为我需要使用此脚本的页面加载非常奇怪(连续 3 或 4 次)。

当我将sendEmail放入定时函数中时,该值是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);
})();

javascript html timer getelementbyid mailto
1个回答
0
投票

改变

emailButton.addEventListener('click', sendEmail(idElement));

emailButton.addEventListener('click', () => { sendEmail() });

或者只是

emailButton.addEventListener('click', sendEmail);

由于您立即调用 sendmail,因此您添加了事件 -

然后将

function sendEmail(idElement) {
更改为
function sendEmail() {
,让函数访问全局变量。

然后还要从函数内部的

const
中删除
const idElement
,并将全局变量更改为
let 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';

  let idElement = "rien"; // accessible from the whole IIFE

  window.addEventListener('DOMContentLoaded', function() {
    // Utilisez setTimeout pour afficher le message après 10 secondes
    setTimeout(function() {
      idElement = document.getElementById('application-AccessManagement-Display-component---accessManagementPhase--accessmanagement_01_01_01-defaultXML--internationalCode-inner').value; // sett the global value
      console.log(idElement);
      // return idElement; // this does nothing!
      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() {
    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);

})();

© www.soinside.com 2019 - 2024. All rights reserved.