javascript - Chrome 扩展图像更改不持久
问题描述
我正在尝试创建一个 Chrome 扩展程序(实际上是 Opera,但我认为这并不重要),它使用两个文本框作为输入来生成要渲染的图像的路径,但图像永远不会出现。
清单.json
{
"manifest_version": 2,
"name": "Opera Extensions — Getting Started",
"description": "Sample extension for the “Making your first extension” article",
"version": "1.0",
"background": {
"scripts": ["home.js", "background.js"]
},
"permissions": ["tabs"],
"browser_action": {
"default_icon": "icon.png",
"default_title": "Go to Dev.Opera!"
},
"web_accessible_resources": ["home.html"]
}
主页.html
<html>
<body>
<form>
<label for="a">Part 1:</label>
<input type="text" id="a" name="a"><br><br>
<label for="b">Part 2:</label>
<input type="text" id="b" name="b"><br><br>
<input id="submit" type="submit" value="Go">
</form>
<img id="myImg" src="" />
</body>
</html>
<script src="home.js"></script>
主页.js
var submit = null;
document.addEventListener("DOMContentLoaded", () => {
submit = document.getElementById("submit");
if (submit !== null) {
submit.addEventListener("click", myFunction);
}
});
function myFunction() {
var a = document.getElementById('a').value;
var b = document.getElementById('b').value;
if (a !== '' && b !== '') {
var fileName = "media/" + a + b + ".png";
var image = document.getElementById("myImg");
image.src = fileName;
} else {
alert('Enter values');
}
}
奇怪的是,当我调试我的代码时,检查元素时确实会出现正确的路径,但是一旦代码完成调试,图像 src 就会恢复为空。我也知道路径是正确的,因为如果我将它硬编码到 src 中,它确实会出现。
下面的第一张图片显示了调试期间的 HTML,第二张显示了硬编码时出现的图片。
任何帮助,将不胜感激。谢谢。
解决方案
您的表单正在提交,整个页面正在刷新。在单击侦听器中,您需要接受事件参数并调用 preventDefault()。像这样的东西:
submit.addEventListener("click", (e) => {
e.preventDefault()
myFunction()
});
调用 preventDefault 将阻止事件的默认操作发生。在这种情况下,提交表单。在这里阅读所有相关信息。
推荐阅读
- flutter - 从 Cloud Functions 覆盖 Cloud Storage 中调整大小的图像的错误
- ios - DarkMode:- 颜色反转不适用于 WKWebview Tableview 内容
- elasticsearch - 使用 NiFi 仅使用新的 ElasticSearch 文档
- excel - 在Excel中使用连接函数将两个单元格合并为一个
- java - 如何在个人 linux 裸机上管理微服务?
- php - 消息:未定义索引:图像更新图像 PHP
- python - 从python中的矩阵向量化所有组合的角度计算
- java - 现在以 16 位十六进制(16 个字符)获取时间和日期
- visual-studio-code - VS Code 的扩展图标消失了,为什么?
- javascript - 如果不匹配,数组中的 Javascript 对象仍然会被删除