我正在开发一个简单的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>
。