getElementById()。click()不在if语句范围内运行

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

[我正在尝试运行以下代码If语句,该语句仅与console.log()一起运行,而单独由getElementById.click()运行。但不结合时。我正在尝试使用Google Apps脚本重定向我的Web应用程序上的页面。

document.getElementById("login").addEventListener("click", submitL); //eventlistener for login 
function submitL() {
  var loginInfo = {}
  loginInfo.email = document.getElementById.("email").value;
  loginInfo.password = document.getElementById.("password").value;
  var ss = SpreadsheetApp.openById("15rUIxS8w53bvPZvTKuOdGw-ZP6eWMaykVJ26vqGBkEg");
  var ws = ss.getSheetByName("logindet");
  var loginList = ws.getRange(2, 1, ws.getLastRow() - 1, 3).getValues();
  var email = loginList.map(function (r) {
    return r[0]
  });

  var password = loginList.map(function (r) {
    return r[1]
  });

  var viewNameData = loginList.map(function (r) {
    return r[2]
  });
  var loginEmail = loginInfo.email;
  var loginPW = loginInfo.password;
  for (var i = 0; i < email.length; i++) {
    if ((loginEmail == email[i]) && (loginPW == password[i])) {
      document.getElementById("load").click();
    }
  }
}
javascript html google-apps-script web-applications login-script
1个回答
0
投票

您需要分割您的Google Apps脚本代码和客户端Javascript代码:

客户端JavaScript代码

document.getElementById("login").addEventListener("click", submitL); //eventlistener for login 

function submitL() {
  var loginInfo = {}
  loginInfo.email = document.getElementById.("email").value;
  loginInfo.password = document.getElementById.("password").value;

  var email = loginList.map(function (r) {
    return r[0]
  });

  var password = loginList.map(function (r) {
    return r[1]
  });

  var viewNameData = loginList.map(function (r) {
    return r[2]
  });
  var loginEmail = loginInfo.email;
  var loginPW = loginInfo.password;
  google.script.run.withSuccessHandler(onLoginResponse).logIn(loginEmail, loginPW);
}

function onLoginResponse(loggedIn) {
  if (loggedIn) {
    document.getElementById("load").click();
  } else {
    alert("Login unsuccessful, wrong credentials.");
  }
}

服务器端Google Apps脚本代码

function getLoginList() {
  var ss = SpreadsheetApp.openById("15rUIxS8w53bvPZvTKuOdGw-ZP6eWMaykVJ26vqGBkEg");
  var ws = ss.getSheetByName("logindet");
  return ws.getRange(2, 1, ws.getLastRow() - 1, 3).getValues();
}

function logIn(loginEmail, loginPW) {
  var loginList = getLoginList();
  for (var i=0; i<loginList.length; i++) {
    var row = loginList[i];
    if (loginEmail == row[0] && loginPW == row[1]) {
      // Found user
      return true;
    }
    return false;
  }
}

说明

SpreadsheetApp无法从客户端访问,因此此分隔是必要的。在这种情况下,客户端要求服务器端使用logInloginEmail参数运行loginPW功能。之后,它将处理该远程功能的响应。

google.script.run.withSuccessHandler(onLoginResponse).logIn(loginEmail, loginPW);

如果找到登录匹配项,则远程功能返回true,否则返回false。如果响应为肯定,则将执行document.getElementById("load").click();语句。

请记住,该应用程序仍然可以被“黑客入侵”,因为仍然可以执行该按钮,即从开发者工具控制台中单击。如果您担心安全性,建议您学习并实施其他更安全的身份验证方法。

参考

您可以在此链接中了解有关HTML服务通信(前端和后端)的更多信息:https://developers.google.com/apps-script/guides/html/communication

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