【发布时间】:2017-11-06 14:06:56
【问题描述】:
我正在试验 Firefox 网络扩展。我想在提交表单后使用 fetch API 发出 HTTP 请求。问题是获取请求没有做任何事情。
这是从我的 manifest.json 中提取的数据:
"browser_action": {
"default_popup": "test.html"
},
"permissions": [
"<all_urls>"
],
这是我的 test.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form>
<button type="submit">Submit</button>
</form>
<script src="test.js"></script>
</body>
</html>
这是我的 test.js:
document.querySelector("form").addEventListener("submit", fetchTest);
function fetchTest() {
console.log("TEST");
fetch('https://httpbin.org/get')
.then(response => response.json())
.then(response => {
console.log(response);
return response;
})
.catch(error => console.log(error));
}
当我单击表单的提交按钮时,我看到我的函数fetchTest 被调用,因为我可以在控制台中看到“TEST”消息。但是,“网络”面板中没有来自浏览器的请求,控制台中也没有错误,就好像 fetch() 从未发生过一样。
然后,我尝试用 xhr 做同样的事情:
function fetchTest() {
console.log("TEST");
const req = new XMLHttpRequest();
req.open('GET', 'https://httpbin.org/get', false);
req.setRequestHeader("Content-Type", "application/json");
req.send(null);
console.log(req);
}
使用此版本,一切正常。我在“网络”面板中看到了请求,并且我的控制台中有数据。
我是否使用了 fetch API 错误?
谢谢:)
【问题讨论】:
-
如果在 HTML 中将
type="submit"替换为type="button"并在代码中将"sumbit"替换为"click"会有什么变化吗?至少在 Chrome 中使用submit输入是个坏主意。也许FF对它更宽容,但值得一试。 -
谢谢,它似乎可以工作 :) 我找不到它不能与提交事件一起工作的原因。但是,现在每次单击字段时都会执行请求。我只是在提交按钮上添加了一个id,并在按钮上添加了事件监听器。
-
添加说明;我要求先进行测试,因为我不确定 Firefox 是否会有所不同。
标签: javascript firefox-addon fetch-api firefox-addon-webextensions