getElementById (). click () не работает, если область оператора - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь запустить следующий код, если оператор выполняется только с console.log() и getElementById.click() самостоятельно. Но не в сочетании. Я пытаюсь перенаправить страницу моего веб-приложения в сценарий Google Apps.

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();
    }
  }
}

1 Ответ

0 голосов
/ 13 декабря 2019

Вам необходимо разделить код скрипта 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 не может быть доступно со стороны клиента, поэтому это разделение необходимо. В этом случае клиентская сторона запрашивает на стороне сервера запустить функцию logIn с параметрами loginEmail и 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

...