ничего не происходит, когда я использую тег script в ejs

#javascript #ejs

#javascript #ejs

Вопрос:

Я создаю простую панель бота discord, я хотел, чтобы не нужно было нажимать кнопку отправки, к сожалению, <select onchange="this.form.submit()"></select> не работает, то же самое console.log() или такая простая функция, как document.getElementById("").innerHTML = "text";

Мой файл:

 <head>
    <title><%=bot.user.username%></title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
    <link rel="stylesheet" href="assets/assets/css/main.css" />
    <noscript><link rel="stylesheet" href="assets/assets/css/noscript.css" /></noscript>
</head>
<form method="post">
  <select style="float: right" name="lang" id="slct" onchange="this.form.submit()">
    <option selected hidden value="no-change">LANGUAGE</option>
    <optgroup style="color: #99AAB5" label="finished">
    <option style="color: #7289DA" value="en">English</option>
    <option style="color: #7289DA" value="pl">Polish</option>
    <optgroup style="color: #99AAB5" label="beta">
    <option style="color: #7289DA" value="fr">France</option>
  </select>
  </form>
  

Протестированный код:

 <p id="test">Not changed</p>
<script>
document.getElementById("test").innerHTML = "Changed";
</script>
  

Визуализировать файл:

 const dataDir = path.resolve(`${process.cwd()}${path.sep}dashboard`);
const templateDir = path.resolve(`${dataDir}${path.sep}page`);

const renderTemplate = (res, req, template, data = {}) => {
    const baseData = {
      bot: client,
      path: req.path,
      user: req.isAuthenticated() ? req.user : null
    };
    res.render(path.resolve(`${templateDir}${path.sep}${template}`), Object.assign(baseData, data));
  };

app.get("/", (req, res) => {
    const duration = moment.duration(client.uptime).format(" D[d], H[h], m[m], s[s]");
    const members = client.guilds.cache.reduce((p, c) => p   c.memberCount, 0);
    const textChannels = client.channels.cache.filter(c => c.type === "text").size;
    const voiceChannels = client.channels.cache.filter(c => c.type === "voice").size;
    const guilds = client.guilds.cache.size;
    renderTemplate(res, req, "index.ejs", {
      stats: {
        servers: guilds,
        members: members,
        text: textChannels,
        voice: voiceChannels,
        uptime: duration,
        memoryUsage: (process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2),
        dVersion: Discord.version,
        nVersion: process.version
      }
    });
  });
  

Я также тестировал с помощью window.onload функции, кто-нибудь может помочь?

Комментарии:

1. Несвязанный совет: каждый path.resolve(`${a}${path.sep}${b}`) может быть записан path.join(a, b) .

2. Где вы обрабатываете post?

3. Проверьте инструменты разработчика вашего браузера. Правильно ли выглядит дерево документа с точки зрения HTML? Есть ли какие-либо ошибки в консоли, возможно, связанные с политикой безопасности контента?

4. @Ry- Да, проблема в политике безопасности контента

5. Хорошо. Где вы используете это, добавляющее политику безопасности контента (или вы ее добавляете?), и какова политика? (Используйте сетевую панель, чтобы увидеть заголовок Content-Security-Policy в ответе на запрос документа. Или это может быть указано в сообщении об ошибке.)