Отправить форму на странице расширения Firefox - PullRequest
1 голос
/ 11 июня 2019

Я разрабатываю простое расширение для Firefox. У меня есть страница, которая содержит форму для ввода имени пользователя. Эта страница открывается, когда пользователь нажимает кнопку действия браузера. Внутри этого файла есть файл javascript, из которого я хочу отправить это имя на внутренний сервер Node.Js. Но я не знаю, как выполнить отправку формы, я пробовал разные методы, но у меня ничего не работает.
Это мой manifest.json файл:

{
  "manifest_version": 2,
  "name": "Ext",
  "version": "1.0",
  "description": "My Experiments.",
  "icons": {
    "48": "icons/ff.jpg"
  },
  "permissions": [
    "webRequest",
    "storage",
    "alarms",
    "tabs",
    "notifications",
    "activeTab",
    "<all_urls>"
  ],
  "background": {
    "scripts": [
      "background-script.js"
    ]
  },
  "browser_action": {
    "default_icon": "icons/toggle-off.png",
    "default_title": "EXT"
  }

}

Это мой index.html файл, в котором находится отправляемая форма.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Firefox Extension</title>
    <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
    <link rel="stylesheet" href="form.css">
</head>
<body>
<div class="container">
    <div id="form-main">
        <div id="form-div">
            <p class="desc">Thank you for installing our Extension!</p>
            <form class="montform" id="reused_form">
                <div class="group">
                    <input name="name" type="text" class="feedback-input" required id="name" autocomplete="off"/>
                    <span class="highlight"></span>
                    <span class="bar"></span>
                    <label> Please tell your name</label>
                </div>
                 <div class="submit">
                     <button type="submit" class="button-blue"><img src="../icons/right-arrow.png"></button>
                 </div>
            </form>
        </div>
    </div>
</div>
<script src="js/index.js"></script>
</body>
</html>

Это мой index.js файл, из которого я хочу отправить свою форму.

document.addEventListener("click", (e) => {
    console.log(e.target)
    if (e.target.classList.contains("button-blue")) {
    console.log("sss")
    e.preventDefault();
    var xhr = new XMLHttpRequest();
    let savedItem = browser.storage.local.get("ip");
    savedItem.then(function (item) {
        document.getElementById('ip').value = item.ip;
        xhr.addEventListener("load", reqListener);
        xhr.open('POST', 'http://localhost:2056/save/name', true);
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.send(`name=${document.getElementById('name').value}&&ip=${item.ip}`);
        return false;
    });

    }
});

function reqListener() {
    const resp = JSON.parse(this.responseText);
    if (resp.error)
        console.error(resp.errorMsg);
    else {
        browser.tabs.query({active: true, currentWindow: true})
            .then(function (tabs) {
                browser.tabs.remove(tabs[0].id);
                browser.tabs.create({
                    url: './pages/second_page.html'
                });
            });
    }
}

Я ничего не получил от e.target, он показывает <unavailable>, когда утешает его.

1 Ответ

0 голосов
/ 13 июня 2019

Я не уверен, что вызывает проблемы на вашей стороне, я создал расширение на основе вашего комментария, удалил несколько дополнительных строк из вашего кода, и это работает для меня в Chrome и Firefox:

enter image description here

Это код JavaScript, который я использовал:

document.addEventListener("click", (e) => {
    e.preventDefault();
    console.log('e.target: ',e.target)
});

Не могли бы вы перепроверить свой код или поделиться с нами полным проектом?

...