Я разрабатываю простой конвейер, который, когда пользователь выделяет текстовый блок на странице Chrome и щелкает расширение, показывает выделенный текст внутри <iframe>
, определенный в popup.js
расширения Chrome, и отправляет выделенный текст насервер, работающий на Express.js
.
Текущий статус - popup.html, в котором работают popup.js, а popup.js записывает highlighted text
в document
.Пока что это работает хорошо.
Тем не менее, работающий терминал node app.js
продолжает показывать undefined
всякий раз, когда я нажимаю на chrome extension favicon
.Я ожидаю, что выделенный текст будет отображен в журнале терминала.
Какова возможная причина этого неправильного действия?
popup.html
<html>
<head>
<meta charset="UTF-8">
<style>
body {
width: 400px;
height: 500px;
}
iframe {
width: 400px;
height: 500px;
}
</style>
</head>
<body>
<iframe frameborder="1"></iframe> <!--'1' for border on/ '0' for border off-->
<script type="text/javascript" src="popup.js"></script>
</body>
</html>
popup.js
chrome.tabs.executeScript( {
code: "window.getSelection().toString();"
}, function(selection) {
document.write(selection[0]);
var text =
'<form action="http://localhost:8080/example" method="post" id="hlgt_form">' +
'<input type="hidden" id = "hlgt" name = "hlgt" value= ""> ' +
'</form>';
document.write(text);
document.getElementById('hlgt').value = selection[0];
// it stores highlights into value of <input>
document.getElementById('hlgt_form').submit();
});
app.js (выполняется узлом app.js)
const express = require('express');
const app = express();
app.use(express.json());
const port = 8080;
app.listen(port, () => {
console.log(`Server running on port: ${port}`);
});
app.post('/example', (req, res) => {
console.log(`${req.body.name.hlgt}`);
});