我正在构建一个Chrome扩展程序,该扩展程序包含在提交时执行onsubmit="submit(); return false;"
的表单。
我知道方法提交有效,因为我使用onclick="submit()"
在表单外创建了一个按钮,效果很好。
以下是表格:
<form method="post" name="gaffeForm" onsubmit="submit(this); return false;">
<div>
<div class="submitField">
<p class="formp">Title :</p>
<input type="text" name="title" size="50" id="pageTitle" placeholder="Title" required />
</div>
<div class="submitField">
<p class="formp">URL :</p>
<input type="url" name="url" size="50" id="pageURL" placeholder="URL" required />
</div>
<div class="submitField">
<p class="formp">Error :</p>
<textarea name="gaffe" rows="5" cols="50" id="pageGaffe" placeholder="Gaffe" required ></textarea>
</div>
<div class="submitField">
<p class="formp">Comment :</p>
<textarea name="comment" rows="5" cols="50" id="gaffeComment" placeholder="Your comment on the gaffe" required ></textarea>
</div>
<div class="submitField">
<p class="formp">Tags :</p>
<input type="text" name="tags" size="50" id="gaffeTags" placeholder="Separate the tags with a comma" required />
</div>
<div id="GaffeSubmit">
<input type="submit" value="Submit" />
</div>
</div>
</form>
这是submit()
函数:
function submit(f) {
var xhr = new XMLHttpRequest();
var title = $('#pageTitle').val().replace(/\//g, "%2F");
var url = $('#pageURL').val().replace(/http:\/\//, "").replace(/https:\/\//, "").replace(/\//g, "%2F");
var gaffe = $('#pageGaffe').val().replace(/\//g, "%2F");
var comment = $('#gaffeComment').val().replace(/\//g, "%2F");
var tags = $('#gaffeTags').val().replace(/\//g, "%2F");
xhr.open("POST", "http://localhost:3000/F0ETF87dar8F7deO92K/" + title + "/" + url + "/" + gaffe + "/" + comment + "/" + tags, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (req.status == 200) window.close();
}
};
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Connection", "close");
xhr.send();
return false;
}
所以,当我点击提交时我填写的所有字段都会发生的事情是字段注释和标签变成空白,就是这样......我尝试了很多不同的执行方式submit()
但是没有人工作过......谢谢你。
答案 0 :(得分:0)
页面是从扩展程序加载还是从网站加载,并且您试图在名为的扩展内容脚本中使用submit()
函数?
如果submit
函数位于内容脚本中,则无法从网站调用它,因为Chrome扩展安全系统不允许在内容脚本中页面内容和javascript之间进行javascript调用。
答案 1 :(得分:0)
跨域策略禁止向其他端口发送请求。如果您打开错误控制台,您可能会看到安全错误。
您可以在清单中设置域权限,但不能设置端口。